首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C/ C++ 指標運算陷阱:'a' + j 不是陣列存取,而是字元運算

     編輯:程式設計疑難解答

誤區現場

程式碼中出現 `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 陣列?

字元運算結果仍是字元/整數,若想對 int arr[] 做相對偏移存取,必須使用指標運算:*(arr + j) 或 arr[j]。編譯器會根據型別自動乘上 sizeof(int) 計算位元組偏移。

總結

區分「字元/整數純量運算」與「指標/陣列記憶體存取」是掌握 C/C++ 指標的關鍵一步。`'a' + j` 是前者,`*(p + j)` 是後者,兩者語義天差地別。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved