核心规则:*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)*:

像一个*焊死的目标地址**。**指针自己的指向不能变 (指针地址是固定的)。**

---