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

C 語言 ++/-- 運算子優先級與副作用深度解析

     編輯:關於C語言

核心規則

運算子名稱運作方式運算式值
a++後置遞增先參與運算,再遞增遞增前的值
++a前置遞增先遞增,再參與運算遞增後的值
a--後置遞減先參與運算,再遞減遞減前的值
--a前置遞減先遞減,再參與運算遞減後的值

經典範例逐步拆解

int a = 10, b, c, d;

b = a++;  // ① b=10, a=11
c = ++a;  // ② a=12, c=12
d = 10 * a++; // ③ d=120, a=13

結果:b=10, c=12, d=120

關鍵步驟說明

  1. b = a++:賦值運算子 = 優先級高於後置 ++?錯誤觀念。實際上後置 ++ 優先級最高,但其「副作用」(遞增)在序列點(此處為語句結尾 ;)前完成。運算式值為 10,賦予 b,隨後 a 變 11。
  2. c = ++a:前置 ++ 先將 a 變 12,運算式值為 12,賦予 c。
  3. d = 10 * a++:* 優先級高於後置 ++。先計算 10 * a(a 為 12)得 120,賦予 d;語句結束前 a 遞增為 13。

括號改變結合順序

int a = 10, d;

d = 10 * (a++);  // 等同 10 * a++,d=100, a=11
d = 10 * (++a);  // 先 ++a 變 11,再 10*11=110,d=110, a=11

運算子優先級速查(高→低)

後置 ++ --  ( ) [ ] . -> 
前置 ++ --  sizeof & * + - ~ ! (型別轉換)
* / % 
+ - 
<< >> 
< <= > >= 
== != 
& 
^ 
| 
&& 
|| 
?: 
= += -= *= /= %= <<= >>= &= ^= |= 
, (逗號運算子)

最佳實務建議

  • 避免在同一語句中對同一變數多次修改(如 a = a++ + ++a),行為未定義
  • 複雜運算式加上括號明確意圖,提升可讀性
  • 偏好前置 ++/--(無暫存變數開銷),除非確實需要後置語意
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved