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

C語言運算符優先級完整表、口訣與易錯點總結

     編輯:關於C語言

C語言運算符優先級完整表、口訣與易錯點總結

運算符優先級決定表達式求值順序,掌握它是寫出正確代碼的前提。本文提供完整優先級表、記憶口訣、高頻易錯點。

完整優先級表(高到低)

級運算符名稱結合性
1[] () . ->下標、調用、成員訪問左→右
2! ~ ++ -- + - * & (type) sizeof單目運算符右→左
3* / %乘除模左→右
4+ -加減左→右
5<< >>移位左→右
6< <= > >=關係比較左→右
7== !=相等比較左→右
8&按位與左→右
9^按位異或左→右
10|按位或左→右
11&&邏輯與左→右
12||邏輯或左→右
13?:條件運算符右→左
14= += -= *= /= %= &= ^= |= <<= >>=賦值運算符右→左
15,逗號運算符左→右

記憶口訣

括號成員第一;          // [] () . ->
全體單目第二;          // 所有單目運算符
乘除模三,加減四;      // * / %  →  + -
移位五,關係六;        // << >>  →  < <= > >=
等於不等排第七;        // == !=
位與異或位或;          // &  ^  |
三分天下八九十;        // 對應優先級 8,9,10
邏輯與邏輯或;          // &&  ||
十二十一分明;          // 優先級 12, 11
條件高於賦值,          // ?: > =
逗號運算級最低!        // , 最後

高頻易錯點

  1. [] () . -> 同級最高:a[i]++ 先下標後自增;p->field 等價 (*p).field
  2. 單目運算符右結合:*p++ = *(p++) 先取值後指針後移;++*p 先指針後移後取值
  3. 賦值右結合:a = b = c = a = (b = c)
  4. 條件運算符優先級低於邏輯運算:a ? b : c == d = a ? b : (c == d)
  5. && 優先於 ||:a || b && c = a || (b && c)
  6. 位運算優先級低於關係運算:a & b == c = a & (b == c) ❌ 易錯,應加括號
  7. sizeof 是單目運算符:sizeof int * p = (sizeof int) * p ≠ sizeof (int * p)

經典易錯表達式實測

int a = 1, b = 2, c = 3;
printf("%d\n", a + b * c);        // 7,非 9
printf("%d\n", a == b == c);      // 0,非語法錯誤:(a==b)==c → 0==3 → 0
printf("%d\n", a = b = c);        // 3,a=b=c=3
printf("%d\n", sizeof a + b);     // sizeof(a) + b,非 sizeof(a+b)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved