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

C++ 常量指標與指標常量深度解析

     編輯:關於C語言

許多開發者在長期未使用 C++ 後,會發現連最基礎的指標與常量結合語法都記憶模糊。本文將系統梳理 const int* ptr(常量指標)與 int* const ptr(指標常量)的核心差異,並提供一套「從右向左讀」的通用記憶法,助你徹底攻克這個經典面試題。

核心概念:英文命名揭示本質

中文翻譯容易造成混淆,不若直接理解英文原意:

  • Pointer to Const(指向常量的指標):指標可變,指向的資料不可修改。語法:int const* ptr 或 const int* ptr。
  • Const Pointer(常量指標):指標本身不可變(不可指向他處),但指向的資料可修改。語法:int* const ptr。

「從右向左讀」記憶法則

掌握這一規則,即可秒懂所有 const 與指標的組合:

  1. 先找到變數名(ptr)。
  2. 向左看:遇到 * 表「是個指標」;遇到 const 表「左邊緊鄰的元素不可修改」。
  3. 繼續向左直到類型名(int)。

範例 1: int const* ptr

ptr          → 變數名
*            → 是個指標
const        → 指向的資料不可修改(常量)
int          → 指向整數

範例 2: int* const ptr

ptr          → 變數名
const        → 指標本身不可修改(常量指標)
*            → 是個指標
int          → 指向整數

程式碼實證差異

int a1 = 1, b1 = 2, c1 = 3;
int* pointer = &a1;                // 普通指標
int const* pointerToConst = &b1;   // 常量指標
int* const constPointer = &c1;     // 指標常量

int a2 = 10, b2 = 20, c2 = 30;
pointer = &a2;          // ✅ 合法:改變指向
pointerToConst = &b2;   // ✅ 合法:改變指向
// constPointer = &c2;  // ❌ 編譯錯誤:指標常量不可改變指向

*pointer += 100;              // ✅ 合法:修改資料
// *pointerToConst += 100;    // ❌ 編譯錯誤:資料為常量
*constPointer += 100;         // ✅ 合法:修改資料

// 輸出:*pointer=110, *pointerToConst=20, *constPointer=103

進階組合與避坑指南

理解 const 修飾其右側緊鄰元素後,複雜聲明迎刃而解:

  • const int* const ptr:指向常量的常量指標(雙重限制)。
  • int* const* ptr:指向「指標常量」的指標。
  • 錯誤示範: const int const* ptr — 對 int 重複套用 const,編譯器會報警(C4114)。

建議:代碼中優先使用英文語義(PointerToConst、ConstPointer)命名變數,從根源上消除中文術語歧義。

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