const与指针
发现了小妙招嘿嘿!
- 如果有
const int,就改成int const - 每观察一个
const,就将该const右侧所有多余的const暂时删去,然后会得到若干个*和变量名 - 这表示,这个
const是修饰,后面这个解引用若干次的表达式的值不变
例如
int * const * p2
这个 const 右边是 *p2,也就是表示 p2 解一层引用是常量,也就是 p2 指向的指针不可变
const int **p4
改成 int const ** p4
const 右边是 **p4,表示 p4 解两层引用不可变,也就是 p4 指向的指针指向的变量是常量,但是 p4 自己和 p4 指向的指针都可以改变。
一级指针比较简单,const 在 * 之前,表示指针指向的变量不可改变,const 在 * 之后,表示指针本身不可改变。
int a = 10;
int b = 20;
// 情况1: 指向的内容是const
const int *p1 = &a; // 等价于 int const *p1
// *p1 = 30; // 错误: 不能修改指向的内容
p1 = &b; // 正确: 可以改变指针指向
// 情况2: 指针本身是const
int * const p2 = &a;
*p2 = 30; // 正确: 可以修改指向的内容
// p2 = &b; // 错误: 不能改变指针指向
// 情况3: 都是const
const int * const p3 = &a;
// *p3 = 30; // 错误
// p3 = &b; // 错误
二级指针开始,情况变得复杂,因为有两个 * 号,而 const 可以插到任何一个 * 之间。

浙公网安备 33010602011771号