for (i = 1; i < 10; i++)
a++;
// 循環結束後 i 的值是多少?
// A. 9 B. 10 C. 11 D. 不確定
| 階段 | 動作 | i 的值 | 條件 i<10 | 說明 |
|---|---|---|---|---|
| 初始化 | i = 1 | 1 | - | 僅執行一次 |
| 第1次迭代 | 檢查條件 → 執行體 → i++ | 1→2 | true | a++ 執行 |
| 第2次迭代 | 檢查條件 → 執行體 → i++ | 2→3 | true | a++ 執行 |
| ... | ... | ... | ... | ... |
| 第9次迭代 | 檢查條件 → 執行體 → i++ | 9→10 | true | a++ 執行(最後一次) |
| 第10次檢查 | 檢查條件 | 10 | false | 循環結束,i 保持 10 |
init; condition; incrementi++ 也會執行i 泄露到外層,C99 起可在 for(int i=...) 限制作用域// 變體1:前置遞增
for (i = 1; i < 10; ++i) a++; // 同樣結果 i=10
// 變體2:條件包含增量
for (i = 1; i++ < 10; ) a++; // i 最終為 11!陷阱!
// 變體3:無增量表達式
for (i = 1; i < 10; ) { a++; i++; } // i=10,手動控制
// 變體4:while 等價形式
i = 1;
while (i < 10) { a++; i++; } // i=10
「初始一次,條件每輪,循環體後增,假時停不增」
循環結束時,控制變量已經完成了最後一次遞增,但條件判斷失敗阻止了進入循環體。