程式碼中出現 `char *p = "abc"; char c = *(p + j);` 或 `'a' + j`,初學者誤以為是陣列索引存取,實則是指標/字元算術。
'a' 是字元字面常數,型別為 char(整數值 97)。'a' + j 執行整數加法,結果為 97 + j,若 j=1 則為 98(對應字元 'b')。int arr[10] = {0};
int *p = arr;
int val1 = p[3]; // 陣列語法糖,等同 *(p + 3)
int val2 = *(p + 3); // 指標解引用
int val3 = *(arr + 3); // 陣列名退化為指標
字元運算結果仍是字元/整數,若想對 int arr[] 做相對偏移存取,必須使用指標運算:*(arr + j) 或 arr[j]。編譯器會根據型別自動乘上 sizeof(int) 計算位元組偏移。
區分「字元/整數純量運算」與「指標/陣列記憶體存取」是掌握 C/C++ 指標的關鍵一步。`'a' + j` 是前者,`*(p + j)` 是後者,兩者語義天差地別。