首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言 const 關鍵字深度解析:指標常量、常量指標與多級 const 讀寫規則

     編輯:關於C語言

核心原則:const 修飾「右側第一個符號」

符號定義:資料型別 [*] 或 [*] 變數名 或 *。
依此規則由右向左讀取宣告,即可精確判斷什麼被鎖定為常量。

七種宣告逐一拆解

宣告讀法(由右向左)const 修飾對象初始化要求
const char *p1p1 是指標 → 指向 char → char 是 const*p1 (指向的值)p1 本身可修改,*p1 不可修改
char const *p2同上(const 前置/後置等價)*p2同 p1
char * const p3p3 是 const → 指標 → 指向 charp3 (指標本身)宣告時必須初始化,之後不可指向他處
const char **p4p4 指標 → 指向指標 → 指向 const char**p4p4、*p4 可修改,**p4 不可修改
char const **p5同 p4**p5同 p4
char * const *p6p6 指標 → 指向 const 指標 → 指向 char*p6 (中間指標)p6 可修改,*p6 必須初始化且不可修改
char ** const p7p7 是 const 指標 → 指向指標 → 指向 charp7宣告時必須初始化

賦值相容性規則(C 專家程式設計 P19)

賦值合法需滿足:
1. 兩側指向相容型別,且限定詞相同;
2. 或左側限定詞 包含 右側所有限定詞(左側更嚴格)。

經典陷阱

const char **ppc;
char **pc;
ppc = pc;   // ❌ 錯誤:char** 不能隱性轉為 const char**
            // 因為透過 ppc 可修改 const char* 指向的內容
pc = ppc;   // ❌ 錯誤:const char** 不能轉為 char**

實戰記憶口訣:中文語法「前修飾、後主語」

  • 指標陣列:主語是陣列 → int *arr[10]
  • 陣列指標:主語是指標 → int (*arr)[10]
  • 函式指標:主語是指標 → int (*fp)(int)
  • 指標函式:主語是函式 → int *fp()
  • 指標常量:主語是常量(指標本身不可改) → int * const p
  • 常量指標:主語是指標(指向常量) → const int *p

總結

掌握「const 修飾右側第一符號」核心規則、賦值相容性原則與中文語法口訣,即可輕鬆破解任意複雜度的 const 宣告,編寫型別安全、意圖明確的 C 程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved