【C++学习笔记】关于const int* 、 int const * 、 int* const

发布时间 2023-04-04 17:57:45作者: 咖啡不会醉

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;