語法結構
for (初始化; 條件; 迭代) {
迴圈主體;
}
// 等價 while 形式:
初始化;
while (條件) {
迴圈主體;
迭代;
}
三表達式執行順序
- 初始化:迴圈開始前執行**一次**(宣告/賦值)。
- 條件判斷:每次迴圈開始前求值,**非零(真)進入主體,零(假)結束迴圈**。
- 執行主體。
- 迭代表達式:主體結束後執行,然後回第 2 步。
基本範例
#include <stdio.h>
int main() {
int n = 10;
// 1 到 10 累加
int sum = 0;
for (int i = 1; i <= n; ++i) { // C99 允許迴圈內宣告 i
sum += i;
}
printf("1+...+10 = %d\n", sum); // 55
// 99 乘法表
for (int i = 1; i <= 9; ++i) {
for (int j = 1; j <= i; ++j) {
printf("%dx%d=%2d ", j, i, i*j);
}
putchar('\n');
}
return 0;
}
進階用法
| 模式 | 範例 | 說明 |
| 多變數初始化/迭代 | for (int i=0, j=10; i | 逗號運算子串聯 |
| 省略初始化 | int i=0; for (; i<10; ++i) | 變數在外部已初始化 |
| 省略條件(無限迴圈) | for (;;) { if (break_cond) break; } | 需主體內 break |
| 省略迭代 | for (int i=0; i<10; ) { if (cond) ++i; } | 條件式迭代 |
| 範圍基礎 for (C++11) | for (auto& x : vec) { ... } | C++ 專屬,遍歷容器 |
常見錯誤
| 錯誤 | 現象 | 修正 |
| 分號誤置 | for (int i=0; i<10; ++i); { ... } 主體執行 1 次 | 移除條件後分號 |
| 浮點數作計數器 | 精度誤差導致次數偏差 | 用整數計數,浮點用於計算 |
| 修改迴圈變數 | 主體內 i = 0 導致無限迴圈 | 避免修改,或用 while |
| 無符號倒數陷阱 | for (size_t i=n; i>=0; --i) 永真(i 永遠 >=0) | for (size_t i=n; i-- > 0; ) 或用有符號 |
效能提示
- 前置遞增
++i:無需建立臨時物件,對迭代器/複雜型別有差異,養成習慣。
- 條件判斷簡單化:避免在條件中呼叫函數/複雜運算,提前計算存變數。
- 編譯器優化:現代編譯器對簡單 for 迴圈自動向量化/展開,寫清晰直觀碼即可。
總結
for 適合**已知迭代次數/範圍**的場景,三表達式靈活組合。
- C99 支援迴圈內宣告變數(作用域限於迴圈),推薦使用。
- 掌握「分號陷阱、無符號倒數、浮點計數器」三大經典坑。
- 現代 C++ 優先使用範圍基礎
for (auto& x : container),更安全、更具表達力。
- 上一篇文章: C 語言 gets 函數用法與安全替代方案
- 下一篇文章: C語言中extern關鍵字的深度解析與實戰應用
Copyright ©
程式碼之家 All Rights Reserved