• 认真地记录技术中遇到的坑!

C++中const,int,*定义变量时不同顺序的含义

C/C++ 悠悠 7个月前 (02-25) 600次浏览 0个评论

在C++中,经常容易忘记const int *a和const *int a的区别,其实主要是看const后面修饰的是哪一个类型,以离const最近的为基准即可。

const int *a

const最近的是intconst修饰的是int,而int声明一个整型变量。等价于int const *a

所以const int *a表示声明一个指向常量整数的整型指针aa指针本身可以被修改,但是a指向的整数不能被修改。

const int *a = 0;
const int b = 1;
int c = 2;

a = &b;   // 正确,因为b是常量整数
a = &c;   // 正确,这里c隐式转换为常量整数
*a = 10;  // 编译错误,因为*a表示a指针指向的整数,是常量不能修改

int const *a

const这里修饰的是*a,而*a表示取a指针指向的值,为一个整数且为常量。该写法和const int *a等价。

int *const a

这里const后面是aconst修饰的是a,而a表示指针变量名。

所以int *const a表示声明一个整型的常量指针变量。a指针本身不能被修改,但是a指向的整数可以被修改。

int a = 0;
int *const b = &a;  // 正确。常量定义是必须初始化
*b = 2;  // 正确,指针指向的值可以被修改
const int c = 10;
b = &c;  // 错误,指针b不能被修改赋值为其他地址

const int const *a

const int const *a表示a指针不能被修改,同时a指向的整数也不能被修改。还可以写成:const int * const a

补充

  • const int aint const a等价,都声明一个整型常量
  • 常量对象的地址只能赋值给指向常量对象的指针
  • 非常量对象的地址可以赋值给指向常量对象的指针
  • 常量定义是必须被初始化,因为常量不能被修改
  • 指向常量的指针常用于作为类成员方法或者函数参数,使用引用传递的同时,保证引用参数不被修改

喜欢 (1)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址