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

C/C++ 指標精髓(一):指標概念與四大核心屬性

     編輯:關於C++

指標是 C/C++ 最強大也最危險的特性。本系列首篇建立指標的精確心智模型:定義、四大核心屬性(指標型別、指向型別、指標值/指向記憶體區、指標自身記憶體),為後續運算、記憶體管理、進階應用奠定基礎。

1.1 指標概念

指標:一類特殊變數,儲存「另一個變數或函式的記憶體位址」。

  • 一般變數存「資料值」;指標存「資料在哪裡」。
  • 透過位址間接存取資料,實現資料共享、動態記憶體、高效演算法。

1.2 指標的四大核心屬性

1.2.1 指標型別

語法:宣告語句去掉指標名稱後剩下的部分。

int *ip;        // 型別:int*
char *cp;       // 型別:char*
int **pp;       // 型別:int**
int (*ap)[5];   // 型別:int(*)[5]  (指向 int[5] 的指標)

決定:指標自身佔用記憶體大小(32 位元 = 4 bytes)、參與指標運算的位移單位、型別檢查規則。

1.2.2 指向型別

語法:宣告語句去掉指標名稱與最左邊的 * 後剩下的部分。

int *ip;        // 指向:int
char *cp;       // 指向:char
int **pp;       // 指向:int*
int (*ap)[5];   // 指向:int[5]

決定:解參考 *ip 時,編譯器將目標記憶體視為何種型別;sizeof(*ip) 的值。

1.2.3 指標值(指向記憶體區)

  • 指標儲存的數值,被編譯器解釋為記憶體位址。
  • 32 位元程式:所有指標值均為 32 位元無號整數(0 ~ 4GB)。
  • 指向記憶體區 = 從指標值位址起始,長度 = sizeof(指向型別) 的連續位元組。
  • 未初始化指標:指標值隨機,指向區域無意義/危險。

1.2.4 指標自身記憶體

  • 指標變數本身佔用的記憶體空間。
  • sizeof(指標型別) 可得知:32 位元 = 4 bytes,64 位元 = 8 bytes。
  • 判斷指標表達式是否為左值的依據(如 &p 合法,&(p+1) 非法)。

核心區別總結表

屬性來源決定事項範例 int **pp
指標型別宣告去名指標大小、運算位移、型別檢查int**
指向型別宣告去名去左*解參考型別、sizeof(*pp)int*
指標值執行期賦值指向哪塊記憶體0x00401000
自身記憶體編譯期固定指標變數本身大小、左值性4 bytes

面對新指標必問三問

  1. 這個指標的型別是什麼?
  2. 它指向的型別是什麼?
  3. 它目前指向哪裡(指標值)?

養成此習慣,可消除 90% 指標相關困惑與缺陷。


系列導航:(一) 指標概念與四要素 | (二) 記憶體管理與野指標防禦 | (三) 指標運算 | (四) 進階應用與陷阱

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