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

C語言指針算術詳解:*(p+i) 代表什麼?

     編輯:C 語言問答

深入理解 C 指針算術:*(p+i) 的含義與陷阱

初學者常見程式碼:

char s[80], *p = s;
while (*(p + i) != '\0') {
    *(p + i) = toupper(*(p + i));
    i++;
}

*(p + i) 究竟做了什麼?

核心解析

  1. p 是指針,指向陣列 s 首元素地址(即 &s[0])。
  2. p + i 進行指針算術:地址值增加 i * sizeof(*p) 位元組。因 p 是 char*,sizeof(char) == 1,故地址直接 +i。
  3. *(p + i) 解引用,取得該地址上的值,等價於 p[i] 或 s[i]。

因此,*(p + i) 代表陣列第 i 個元素(從 0 計數)。

關鍵補充:指針類型決定步長

原回答補充提到:

指針+1,具體偏移多遠,和指針類型有關。
char* +1 偏移 1 位元組。
int* +1 偏移 sizeof(int) 位元組(通常 4)。

修正:原文稱 char 偏移 8 位元組、int 偏移 32 位元組錯誤。正確為位元組單位,非位元。32 位系統下 int 通常 4 位元組(32 位元),64 位系統同理。

等價寫法對照表

寫法含義
s[i]陣列下標訪問(最直觀)
*(s + i)指針算術 + 解引用
*(p + i)指針變量算術 + 解引用
p[i]指針當陣列用(C 語言核心特性)

最佳實踐建議

  • 優先使用 s[i] 或 p[i],可讀性最強。
  • 理解 *(p+i) 本質,便於閱讀底層庫源碼、嵌入式代碼。
  • 指針運算時務必確認類型正確,避免越界訪問導致未定義行為。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved