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

C 語言指針後置遞增運算符優先級陷阱:*p++ 究竟先做什麼?

     編輯:程式設計疑難解答

代碼現場

int c[5] = {4,8,3,1,9};
int *p = &c[2]; // 指向 c[2] (值 3)
printf("%d\n", *p++); // 輸出 3,而非 4

運算符優先級與結合性

  • ++(後置)優先級 高于 *(解引用)。
  • 結合性:++ 從左到右,* 從右到左。

因此 *p++ 等價於 *(p++)。

執行步驟

  1. 取當前 p 的值(地址 &c[2])。
  2. 解引用:*p 獲取值 3,作為整個表達式的結果。
  3. 後置遞增:p++ 將 p 移動到下一個 int 位置(&c[3])。
  4. printf 打印步驟 2 的結果 3。

對比:前置遞增

printf("%d\n", *++p); // 等價 *(++p)
// 1. p 先移動到 &c[3] (值 1)
// 2. 解引用獲取 1
// 3. 輸出 1

記憶口訣

「後置 ++:先用值,再加一;前置 ++:先加一,再用值。」

實際應用陷阱

while (*p++ = *q++) ; // 經典字符串拷貝
// *p++ 取 q 指向字符賦值給 p 指向位置,雙指針同步後移
// 遇到 '\0' 賦值結果為 0,循環結束
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved