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

C 語言 const 與指針組合完全圖解:左定值、右定向、雙重約束一網打盡

     編輯:關於C語言

核心口訣

const 在 * 左邊 → 修飾指向的值(不可通過指針修改)
const 在 * 右邊 → 修飾指針本身(指向不可變)

簡記:「左定值,右定向」

四種經典組合逐條拆解

int a = 248, b = 4;
const int c = 21;          // 1. 頂層 const:c 本身不可變
const int *d = &a;         // 2. 底層 const:*d 不可變,d 可指向別處
int *const e = &b;         // 3. 頂層 const:e 不可變指向,*e 可改
const int *const f = &a;   // 4. 雙重 const:指向與值均不可變

表達式合法性判斷表

表達式結果原因
*c = 32❌ 編譯錯誤c 非指針,不可解引用
*d = 43❌ 編譯錯誤*d 為 const int,不可賦值
e = &a❌ 編譯錯誤e 為 const 指針,不可改變指向
f = 0x321f❌ 編譯錯誤f 為 const 指針,不可賦值
d = &b✅ 合法d 本身非 const,可改指向
*e = 34✅ 合法*e 非 const,可通過指針修改值

聲明解讀技巧:從右向左讀

  • const int *p → p is a pointer to a const int
  • int *const p → p is a const pointer to int
  • const int *const p → p is a const pointer to a const int

實戰建議

  1. 函數參數只讀時用 const T*,防止誤修改並接受字面值/常量實參。
  2. 迭代器遍歷容器不修改元素用 const_iterator。
  3. 定義不變的配置指針用 T *const。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved