C语言 const 与指针:不能修改什么?
核心规则:*const 修饰的是它右边最近的那个东西。**
---
#### 1. const type pointer; (或 type const pointer;)
* **含义:** **指向常量数据的指针** (Pointer to const data)。
* *const 修饰谁?** const 修饰的是指针**所指向的变量**(数据)。
* **不能修改:** **不能通过这个指针去修改它所指向的内容。**
即 pointer = value; 操作是**不允许**的。
* **可以修改:** 指针变量本身的指向可以改变。
即 pointer = &another_variable; 操作是*允许**的。
* **口诀:** "**数据只读**,**指针可移**。"
* **示例:** const int p = &a; // p 不能改p 可以改指向
---
#### 2. type *const pointer;
* **含义:** **常量指针** (Constant pointer)。
* *const 修饰谁?** const 修饰的是**指针变量本身**。
* **不能修改:** **指针一旦被初始化,就不能再指向其他地址。**
即 pointer = &another_variable; 操作是*不允许**的。
* **可以修改:** 指针所指向的内容可以通过这个指针来修改。
即 pointer = value; 操作是**允许**的 (前提是原变量不是 const)。
* **口诀:** "**指针固定**,**数据可修**。"
* **示例:** int const p = &a; // p 不能改指向p 可以改
---
#### 3. const type *const pointer;
* **含义:** **指向常量数据的常量指针** (Constant pointer to const data)。
* *const 修饰谁?** 第一个 const 修饰数据,第二个 const 修饰指针本身。
* **不能修改:**
* **不能通过这个指针去修改它所指向的内容。** *pointer = value; 不允许)
* **指针的指向也不能改变。** pointer = &another_variable; 不允许)
* **口诀:** "**什么都不能改**(通过这个指针)"
* **示例:** const int const p = &a; // p 不能改p 也不能改指向
---
#### 📌 **快速记忆技巧**
* *const 在 * 前面 const type )*:
像一个*只读视图**。**不能通过指针写数据 (数据是只读的)。**
* *const 在 * 后面 type const)*:
像一个*焊死的目标地址**。**指针自己的指向不能变 (指针地址是固定的)。**
---