C const 与指针的复杂组合
厘清 const 修饰指针的不同位置(指向常量的指针、常量指针、指向常量的常量指针)及其含义。 · 难度:入门 · +15XP
const 与指针的三种组合
const 关键字与指针结合时,位置不同含义截然不同。理解这些区别对于编写安全、可读的代码至关重要。
1. 指向常量的指针
const int *p; // 或 int const *p;
// 不能通过 p 修改所指向的值,但 p 可以指向其他地址2. 常量指针
int * const p;
// p 本身是常量,不能指向别处,但可以通过 p 修改所指向的值3. 指向常量的常量指针
const int * const p;
// 既不能修改 p 的指向,也不能通过 p 修改值表格:快速区分
| 写法 | 指针本身 | 所指向的值 |
|---|---|---|
| const int *p | 可改 | 不可改 |
| int * const p | 不可改 | 可改 |
| const int * const p | 不可改 | 不可改 |
记忆技巧
从右向左读:const int * const p → “p is a const pointer to a const int”。const 修饰它左边的内容,如果左边没有内容则修饰右边。
练习提示
在 starter_code 中,尝试取消注释各段代码,观察编译器的报错信息,从而理解每种限制是如何生效的。