初學程式設計時,++i 與 i++ 的區別常令人困惑。兩者皆為自增運算符,效果等同於 i = i + 1,但運算順序截然不同。
| 運算符 | 名稱 | 執行順序 | 回傳值 |
|---|---|---|---|
++i | 前綴自增 | 先自增,後使用 | 自增後的值 |
i++ | 後綴自增 | 先使用,後自增 | 自增前的值 |
int a, i = 3;
a = i++ + 1; // a = 4 (先用 i=3 計算,再 i 變 4)
int b, j = 3;
b = ++j + 1; // b = 5 (先 j 變 4,再用 4 計算)
當自增運算符獨立成語句時,兩者效果相同:
i++; // 效果等同於 ++i;
for (int i = 0; i < 10; i++) { } // 循環中常用 i++,但 ++i 亦可
同一表達式中多次修改同一變量,行為不可預測:
// 以下結果取決於編譯器實現,屬未定義行為
printf("%d %d", i++, i); // 輸出順序不確定
a = i + ++i; // 結果不確定
鐵律:單一表達式中,避免對同一變量進行多次修改或修改後再讀取。
++i:先加後用(先賦值,後使用)
i++:先用後加(先使用,後賦值)
掌握此區別,能避免許多隱蔽 Bug,寫出更可靠的程式碼。