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

C語言運算符優先級與結合性實戰:6 種指針遞增/解引用組合等價性分析

     編輯:關於C語言

六種表達式

[cpp]
b = *p++;     // (1)
b = (*p)++;   // (2)
b = ++*p;     // (3)
b = ++(*p);   // (4)
b = *++p;     // (5)
b = *(++p);   // (6)

反汇编對比結論

  • (3) ≡ (4):先遞增 *p 指向的值,再賦給 b。
  • (5) ≡ (6):先遞增指針 p(移動 sizeof(*p) 字節),再解引用賦給 b。
  • (1) 與 (2) 各自獨立,互不等價。

優先級/結合性規則速記

  1. ++ -- * (一元) 同級,右結合。
  2. *p++ → *(p++):後綴 ++ 先結合 p。
  3. ++*p → ++(*p):前綴 ++ 與 * 右結合,先 *p 再 ++。
  4. *++p → *(++p):同理。
  5. 括號可強制改變結合順序。

最佳實踐

複雜指針表達式一律加括號,如 b = *(++p);,消除閱讀歧義,防止維護時出錯。

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