for 循环中的控制结构和流程

for ([declaration-or-expression]; [expression2]; [expression3])
{
    /* body of the loop */
}

for 循环中,循环条件有三个表达式,都是可选的。

  • 第一个表达式 declaration-or-expression 初始化循环。它在循环开始时只执行一次。

Version >= C99

它可以是循环变量的声明和初始化,也可以是通用表达式。如果它是声明,则声明的变量的范围受 for 语句的限制。

Version < C99

C 的历史版本只允许表达式,这里,循环变量的声明必须放在 for 之前。

  • 第二个表达式 expression2测试条件。它首先在初始化后执行。如果条件是 true,则控件进入循环体。如果不是,它会在循环结束时转移到循环体外部。随后,在每次执行正文以及更新语句之后检查此条件。当 true 时,控件移回到循环体的开头。该条件通常用于检查循环体执行的次数。这是退出循环的主要方式,另一种方法是使用跳转语句
  • 第三个表达式 expression3更新语句。它在每次执行循环体后执行。它通常用于递增变量保持循环体执行次数的计数,并且此变量称为迭代器

循环体的每个执行实例都称为迭代

例:

Version >= C99

for(int i = 0; i < 10 ; i++)
{
    printf("%d", i);
}

输出是:

0123456789

在上面的例子中,首先执行 i = 0,初始化 i。然后,检查条件 i < 10,其评估为 true。控件进入循环体并打印 i 的值。然后,控制转移到 i++,将 i 的值从 0 更新为 1.然后,再次检查条件,并继续该过程。这一直持续到 i 的值变为 10.然后,条件 i < 10 评估 false,之后控件移出循环。