C中const修饰指针变量的不同情况
缘起
昨天看到指针,const 修饰这个部分给我看晕了,今天起来专门写个文章记忆一下
分类
修饰 p 指向内容(修饰*p)
1 | const int* p = &a; |
两种写法等效,因为 const 都在*p左边
这种情况下,p是const int*型,const 修饰的是p指向的内容。解引用后无法进行赋值操作
因为p本身没有被 const 修饰,所以指针的值可变,不必初始化
1 |
|
修饰 p
1 | int* const p = &a;` |
p 是int* const型,此时 const 修饰p,必须在定义p时初始化
不初始化的话,p 就是一个野指针
1 |
|
同时修饰 p 和 p 指向内容
其实就是上面两个方法的结合
1 | const int* const p = &a; |
两种写法等效
p和p所指向内容都被 const 修饰,所以两者都不可改变
同样的,因为指针本身被修饰,必须定义时初始化
1 |
|
总结
被const修饰的,不能被修改
const 在*的左边,修饰的就是*p,也就是修饰p指向内容
const 在*的右边,修饰的就是p,也就是p本身
参考
C中const修饰指针变量的不同情况