透過指標能高效利用記憶體、描述複雜資料結構、靈活處理字符串與陣列,使程式簡潔高效。但指標對初學者較難,需結合硬體知識、多動手實作才能掌握。
編譯系統根據資料類型為變數分配固定位置與大小:
| 變數 | 類型 | 位元組 | 假設起始位址 |
|---|---|---|---|
| a, b | int | 2 | 2000, 2002 |
| x, y | float | 4 | 2004, 2008 |
| m | double | 8 | 2012 |
| ch1, ch2 | char | 1 | 2020, 2021 |
記憶體按位元組編址,變數緊密排列。scanf("%d", &a) 即將資料存入位址 &a 指示的單元。
指標變數區域 變數區域 pa = 2000 ──────► a (位址 2000, 值 1) pb = 2002 ──────► b (位址 2002, 值 2) px = 2004 ──────► x (位址 2004, 值 3.4) ...
指標變數 pa 的值是 2000,即 a 的位址。透過 pa 可間接存取 a。
int a = 1, *pa = &a; // 宣告整數指標並初始化
float x = 3.4, *px = &x;
char ch = 'a', *pch = &ch;
指標類型必須與所指變數類型匹配(int* 指向 int 等),否則解引用時會有型別錯誤或未定義行為。