cs
int a = 10, b = 20;
int* p1 = &a;//普通指针
const int* p2 = &a;//等价于int const* p2 = &a;const在左,修饰指向内容
int* const p3 = &a;//const在右,修饰指针本身
const int* const p4 = &a;//const左右都有,修饰指向内容和指针
一、没有 const
cs
int* p1 = &a;
p1 是指向 int* 类型的指针
指针 p1 可以随意指向其他地址,指向的内容也可以修改;
cs
*p1=100;//内容可改
p1=&b;//指针指向可改
二、const 在 * 左
cs
const int* p2 = &a;
p2 是指向 const int 类型的指针 → 指针指向的内容是只读的;
指针 p2 可以指向其他地址,指向的内容不可改
**应用:**函数参数传递时,保护传入的变量不被修改
cs
*p2=100;//内容不可改,error
p2=&b;//指针指向可改
三、const 在 * 右
cs
int* const p3=&a;
p3 是指向 int* 类型的 const 指针→ 指针本身是只读的
指针 p3 不可以指向其他地址,但是可以通过 p3 修改指向内容
**应用:**固定指向某个核心变量,避免误指向其他地址
cs
*p3=100;//内容可改
p3=&b;//指针指向不可改,error
四、const 在 * 两侧
cs
const int* const p4=&a;
p4 是指向 const int* 类型的 const 指针→ 指针本身是只读的和指针指向的内容是只读的
指针 p4 不可以指向其他地址,也不可以通过 p4 修改指向内容
应用:完全只读,适用于全局常量指针
cs
*p4=100;//内容不可改,error
p4=&b;//指针指向不可改,error
五、记忆口诀
- const 在左,内容锁:
const int* p→ 内容不能改,指针能跑;- const 在右,指针锁:
int* const p→ 指针不能跑,内容能改;- 左右都有,全上锁:
const int* const p→ 内容和指针都不能动。