在 C 語言中,理解變量、指針與指向指針的變量(多級指針)之間的關係,是掌握記憶體操作的基石。本文透過具體範例與記憶體地址圖解,帶你釐清這些概念的本質差異與運算邏輯。
假設有以下定義:
int a = 2000; // 一般變量
int *p = &a; // 一級指針,指向 a
int **q = &p; // 二級指針,指向 p
對應的記憶體狀態如下表所示(假設地址為十六進制):
| 變量名 | 變量自身地址 | 變量指向的地址 | 變量的值 |
|---|---|---|---|
| a | 1000H | 無 | 2000 |
| p | 3000H | 1000H | 1000H |
| q | 5000H | 3000H | 3000H |
此規律可推廣至任意級指針:每多一級解引用(*),就向下追蹤一層地址;每多一級取址(&),就向上回溯一層地址。掌握這套「* 與 & 互抵」的口訣,即可在複雜指針運算中準確判斷何時操作地址、何時操作值。
除教學示範外,實際開發中二級指針常用於:函數修改一級指針的指向、動態分配二維陣列、鏈表節點的刪除與插入等場景。建議配合除錯器觀察記憶體窗口,加深體感理解。