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

C 語言常量指針與指針常量本質區別深度解析

     編輯:更多程式設計知識

核心定義對比

名稱語法核心含義可修改項
常量指針
(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 完全等價,均為常量指針
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved