指標是 C 語言的精華。透過指標可:
雖然指標對初學者較難,但多動手實作、結合硬體記憶體模型理解,即可掌握。
宣告變數時,編譯器分配固定記憶體位址與大小:
| 變數 | 型別 | 大小 | 假設位址 |
|---|---|---|---|
| a, b | int | 2 bytes | 2000, 2002 |
| x, y | float | 4 bytes | 2004, 2008 |
| m | double | 8 bytes | 2012 |
| ch1, ch2 | char | 1 byte | 2020, 2021 |
記憶體按位元組編址,每個位址唯一對應一個位元組。變數佔用連續位元組,起始位址即為該變數的「指標」。
&a = 2000)。型別 *指標名;若 int *pa = &a;,則 pa 為指標變數,其值為 2000(a 的位址),*pa 等價於 a。這稱為間接存取。
左側儲存指標變數(值為目標位址),右側為實際資料變數。透過指標變數的值(位址)即可存取對應資料。
pa 位址 3000,值 2000 → 指向 apx 位址 3004,值 2004 → 指向 x指標變數本身也佔用記憶體(通常 2 或 4 位元組,視架構而定),形成「指標指向指標」的多層結構基礎。
&變數 取得變數位址(指標)。型別 *ptr 宣告指向該型別的指標變數。ptr = &變數 使指標指向變數。*ptr 解參考,存取指標指向的變數值。下一章將介紹指標運算子、指標運算式與指標作函數參數的實戰應用。