# 何謂指標
指標(Pointer)
: 用來表示變數所在的記憶體位址。指標變數(Pointer Variable)
: 用來存放指標的變數。
# 變數型態
我們宣告的 int a
是告訴編譯器,我的變數 a,是用來存放 int 型態的,也就是記憶體會有區塊存放著變數 a 的數值。
而當我們使用取址符號 &a
時,這個過程是用來取得變數 a 所在的記憶體位址。
在 C 語言中,任何的數值本身都是有型態的,例如:
- 10 就是一個整數型態。
- &a 取得的就是整數型態的指標。
# 程式碼範例
# 常見使用
int a = 10; // a 的型態是 int | |
int *b; // b 的型態是 (int *) | |
b = &a; // &a 的型態是 (int *) | |
// 由下面程式碼可知,變數 b 存放的是變數 a 所在的記憶體位址 | |
// 我們可以理解為,變數 b 指向變數 a 的位址 | |
printf("address : %p \n", &a); | |
printf("address : %p \n", b); | |
printf("value : %d \n", a); | |
printf("value : %d \n", *b); // 當我們使用 (*b) 時,表示取得變數 b 指向位址的數值 |
# 特殊應用
由於 unsigned long
型態可以儲存上限為 4bytes 或 8bytes,也就是 0 ~ 4294967295 或 0 ~ 18446744073709551615
那麼我們也可以使用 unsigned long
型態的變數來存放記憶體位址。
int a = 10; | |
unsigned long ul = (unsigned long) &a; // 將 指標型態 轉為 unsigned long 型態 | |
int *b = (int *) ul; // 將 unsigned long 型態 轉回 指標型態 | |
printf("address : %p \n", &a); | |
printf("address : %p \n", b); | |
printf("value : %d \n", a); | |
printf("value : %d \n", *b); |