# 何謂指標

  • 指標(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);