for (初始化語句; 條件表達式; 迭代表達式)
循環體語句;
// 三部分皆可為空,分號不可省
for (;;) { /* 無限循環 */ }
等價 while 形式:
初始化;
while (條件) {
循環體;
迭代;
}
// 正向
for (int i = 0; i < n; i++) { }
// 反向 (無號陷阱: i >= 0 永真)
for (int i = n - 1; i >= 0; i--) { } // int 安全
for (size_t i = n; i-- > 0; ) { } // size_t 技巧:i-- 先比較後遞減,到 0 後下一次比較為 SIZE_MAX > 0 停止
// 步長
for (int i = 0; i < 100; i += 10) { }
for (int i = 0, j = n - 1; i < j; i++, j--) { } // 雙指針對撞
for (Node *p = head, *prev = NULL; p; prev = p, p = p->next) { } // 鏈表遍歷保留前驅
int arr[10] = {1,2,3};
for (int *p = arr, *end = arr+10; p != end; ++p) { *p *= 2; }
// C++ 風格範圍 for (C 無原生支援)
for (char *p = str; *p; ++p) { putchar(*p); } // 以 '\0' 結束
int i = 0;
for (; i < 10; i++) { } // 省略初始化
for (i = 0; ; i++) { if (i > 10) break; } // 省略條件 (內部 break)
for (i = 0; i < 10; ) { i++; } // 省略迭代 (體內遞增)
| 語句 | 作用 | 適用循環 |
|---|---|---|
| `break` | **立即跳出**當前最內層循環/switch | for, while, do-while, switch |
| `continue` | **跳過本次剩餘體**,直接執行迭代表達式 → 條件判斷 | for, while, do-while |
| `goto` | 跳轉標籤 (慎用,可跳出多層) | 所有 |
| `return` | 跳出函數 (含循環) | 所有 |
關鍵差異:`for` 中 `continue` **會執行迭代表達式**;`while` 中 `continue` 直接跳回條件判斷 (需手動遞增避免死循環)。
outer: for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (found) break outer; // 標準 C 無此語法,GCC/Clang 支援
// 標準寫法:設置標誌位 或 封裝函數 return
}
}
for (int i = 0; i < 100; i++) {
if (i % 10 == 0 && i != 0) putchar('\n'); // 或 i && i%10==0
printf("%2d ", i);
}