C++ 一级指针与 const 关键字

张春  金牌会员 | 2022-9-17 08:40:28 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 922|帖子 922|积分 2766

可用三种不同的方式将 const 关键字用于一级指针,如下所示:
  1. //方式一:指向常量数据的指针,以下几种为等效表示
  2. const int * ptc;    //方式一
  3. int const * ptc;    //方式二
  4. //方式二:指针本身为常量,需在声明时初始化
  5. int x = 55;
  6. int * const cpt = &x;
  7. //方式三:指向常量数据且本身也为常量的指针,需在声明时初始化,以下几种为等效表示
  8. int x = 55;
  9. const int * const cptc = &x; //方式一
  10. int const * const cptc = &x; //方式二
复制代码
Microsoft Visual Studio 中连续多个 const 会被编译器解释成一个,即 const const const const int 与 const int 等效,除此之外,const int const 在 Microsoft Visual Studio 中也与 const int 等效。
以上三种类型指针的特性如下:

  • 类型为 const int * 的指针 ptc 表示 *ptc 为常量,不能用该指针修改所指对象的值,但可修改其所指向的地址(指针自身的值),可将 int 或 const int数据的地址、int * 或 const int * 类型的指针、以及 int * const 或 const int * const 类型的指针赋给 ptc(接受数据或指针修饰为 const 或非 const)。
  • 类型为 int * const 的指针 cpt 表示 cpt 为常量,能用该指针修改所指对象的值,但不可修改其所指向的地址(指针自身的值),只能将 int 数据的地址 、int * 类型的指针、以及 int * const 类型的指针赋给 cpt(只接受数据修饰为非 const),且必须在声明时初始化。
  • 类型为 const int * const 的指针 cptc 表示 *cptc 和 cptc 都为常量,不能用该指针修改所指对象的值,也不可修改其所指向的地址(指针自身的值),和 const int * 类型的指针一样,可将 int 或 const int数据的地址、int * 或 const int * 类型的指针、以及 int * const 或 const int * const 类型的指针赋给 cptc(接受数据或指针修饰为 const 或非 const),且必须在声明时初始化。
对于类型为 int * 的常规指针,有以下特性:

  • 类型为 int * 的指针 pt 表示 *pt 和 pt 都不为常量,能用该指针修改所指对象的值,也能修改其所指向的地址(指针自身的值),和  int * const 类型的指针一样,只能将 int 数据的地址 、int * 类型的指针、以及 int * const 类型的指针赋给 pt(只接受数据修饰为非 const)。
各类型一级指针的可修改属性如下表所示:
指针类型修改 *pt修改 ptconst int * pt不可以可以int * const pt可以不可以const int * const pt不可以不可以int * pt可以可以若将数据的地址赋予一级指针,各类型一级指针可接受的数据地址如下表所示:
指针类型int地址const int地址const int * pt可以可以int * const pt声明时可以不可以const int * const pt声明时可以声明时可以int * pt可以不可以若将一级指针的值赋予一级指针,各类型一级指针可接受的一级指针值如下表所示:
指针类型const int *值int * const值const int * const值int *值const int * pt可以可以可以可以int * const pt不可以声明时可以不可以声明时可以const int * const pt可以可以可以可以int * pt不可以声明时可以不可以声明时可以
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表