for loop
for 循环
执行一个循环。
用作 while 循环的较短等价物。
句法
for ( init_clause ; cond_expression ; iteration_expression ) loop_statement | | |
---|
说明
行为如下:
- init_clause 可能是一个表达式或一个声明
init_clause,cond_expression和iteration_expression 都是可选的:
for(;;) {
printf("endless loop!"
}
loop_statement 不是可选的,但它可能是一个空语句:
for(int n = 0; n < 10; ++n, printf("%d\n", n))
; // null statement
如果循环的执行需要在某个点终止,则可以在 loop_statement 中的任何地方使用 break 语句。
在 loop_statement 中的任何地方使用的 continue 语句将控制转移到 iteration_expression。
如果循环在其 cond_expression,iteration_expression 或 loop_statement 的任何部分中没有可观察的行为(I / O,易失性访问,原子操作或同步操作),则具有无限循环的程序具有未定义的行为。这允许编译器优化所有不可观察的循环,而不会证明它们终止。唯一的例外是 cond_expression被省略或是一个常量表达式的循环; for(;;)
总是一个无止境的循环。
与所有其他选择和迭代语句一样,for 语句建立块范围:在 init_clause,cond_expression 或 iteration_expression 中引入的任何标识符超出了loop_statement之后的范围。 | (自C99以来) |
---|
关键词
for
.
笔记
与 C ++不同,用作 loop_statement 的表达式语句建立了自己的块范围,与 init_clause 的范围截然不同:
for (int i = 0; ; ) {
long i = 1; // valid C, invalid C++
// ...
}
使用 goto 可以输入循环的主体。在这种情况下,init_clause 和 cond_expression 不会被执行。
例
#include <stdio.h>
#include <stdlib.h>
enum { SIZE = 8 };
int main(void)
{
int array[SIZE];
for(size_t i = 0 ; i < SIZE; ++i)
array [i] = rand() % 2;
printf("Array filled!\n"
for (size_t i = 0; i < SIZE; ++i)
printf("%d ", array[i]
printf("\n"
}
可能的输出:
Array filled!
1 0 1 1 1 1 0 0
参考
- C11 standard (ISO/IEC 9899:2011):