const int*、int const*、 int* const的关键点在于const 与* 的位置,而const 与类型 int的位置无关,可以随意调换,属于个人代码风格,不过建议写成 const int *,方便 直观。
const int*与 int * const 的区别在于 const 修饰的是int* 还是 变量,其中 const int* a 修饰的是int* ,表示这个指针指向的内存区域是常量,不可以修改值,与 const int a 相同,都是不可以改变内存内的值,int* const a 修饰的是变量a,表示变量a的存储的值(指向内存的地址)不可以改变,但是可以改变指向地址的值。
例如:
int m=5,n=10;//定义了两个变量 m n
int* a=&m;//a 是一个指针变量,指向了m的地址,即m存的是5,a存的是m的地址,常规操作中我们可以修改m的值,也可以修改a的值
//如下L:
m=15;//直接修改m的值为15,执行后,m是15,*a也是15;
*a=20;//通过指针a修改m的值,执行后,m是20,*a也是20;
a=&n;//直接修改a的值为n的地址,此时*a是10;
const int* b=&m;//b 是一个指针变量,指向m的地址。
*a=20;//这段代码会报错,因为修饰的是指针,表示指针指向的地址的值不可以改变,与 const int c=5;相同点是都是不能修改c的值,不同点是c的值一直不能改,但*a的值可以通过m=20来改变,执行以后,*a也变成了20。 *a不能改,但m能改
a=&n;//虽然const 约束了指针,但是没有约束指针变量,所以可以修改指针变量的值。即:改变指针变量指向的地址。
int* const b=&m;//b是一个常量地址,指向了m的地址
*b=&n;//这行代码会报错,因为b是一个常量,它的值就是m的地址,不能改变变量b的值。
*b=30;//可以通过*b修改m的值。此时m也是30;
标签:const,变量,int,C++,地址,20,指针
From: https://www.cnblogs.com/kafeibuhuizui/p/17287264.html