int* 讀 4B,char* 讀 1B)&p| 運算子 | 意義 | 範例 |
|---|---|---|
& | 取址 | int *p = &a; |
* | 解參考(取值/存值) | *p = 20; |
p+i | 指標算術,按類型大小位移 | p+1 向後移 sizeof(*p) 位元組 |
arr 退化為首元素位址 &arr[0],但 arr 是**常量指標**,不可賦值int *p = arr; 後,p[i] ≡ *(p+i) ≡ arr[i]int* 指向 char)會導致解參考讀取錯誤位元組數char *s = "iPhone"; // s 指向常數區,不可修改內容 s[2] = 'z'; // 錯誤:Segment Fault char arr[] = "iPhone"; // arr 在堆疊,可修改 arr[2] = 'z'; // OK
char *strs[3] = {"iPhone", "Android", "Win8"}; // 指標陣列
char **p = strs; // 二級指標
printf("%s", p[1]); // "Android"
printf("%c", p[1][4]); // 'o'
printf("%c", *(p[1]+4)); // 'o'
void swap_val(int x, int y) { int t=x; x=y; y=t; } // 無效,改的是副本
void swap_ptr(int *x, int *y) { int t=*x; *x=*y; *y=t; } // 有效
swap_ptr(&a, &b); // 必須傳址