const与指针

发现了小妙招嘿嘿!

  1. 如果有 const int,就改成 int const
  2. 每观察一个 const,就将该 const 右侧所有多余的 const 暂时删去,然后会得到若干个 * 和变量名
  3. 这表示,这个 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 可以插到任何一个 * 之间。

posted @ 2025-12-26 15:01  Zlc晨鑫  阅读(2)  评论(0)    收藏  举报