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修饰指针变量的不同情况