| 名稱 | 語法 | 核心含義 | 可修改項 |
|---|---|---|---|
| 常量指針 (Pointer to Constant) | const int *p 或 int const *p | 指向常量的指針 | 指針本身(可指向別處) |
| 指針常量 (Constant Pointer) | int * const p | 指針本身是常量 | 指向的內容(可通過指針修改值) |
「
const修飾誰,誰就不可變。const在*左 → 修飾指向的類型(內容不可變);const在*右 → 修飾指針變量(指針不可變)。」
int b = 10, c = 20;
const int *p = &b; // 或 int const *p
p = &c; // ✅ 合法:改變指向
// *p = 30; // ❌ 非法:不能通過 p 修改值
int a = 10, aTest = 20;
int * const p = &a; // 必須初始化
*p = 30; // ✅ 合法:修改指向的值
// p = &aTest; // ❌ 非法:不能改變指向
// p = NULL; // ❌ 非法:編譯錯誤 "assignment of read-only variable"
const int * const p = &a; // 指針不可變,指向內容也不可變
// 1. 保護輸入參數不被修改
void PrintArray(const int *arr, int len); // 承諾不修改 arr
// 2. 返回只讀指針
const char *GetErrorMsg(int code); // 調用者不可修改返回的字符串
// 3. 指針常量罕見,除非需要固定指針地址(如硬件寄存器映射)
void HardwareRegister(int * const regAddr);
const int *p = &b; 中 b 可以是非常量,只是承諾通過 p 不修改它int *p = &a; 其中 a 是 const int 會報錯:消除了 const 屬性const int *p 和 int const *p 完全等價,均為常量指針