5.1.3 for循环的变形

在离开for循环的讨论之前,先探讨一下生成这种循环时允许的一些语法变化。编写for循环时,你可能发现在开始循环之前需要初始化多个变量,或者可能每次循环都要计算多个表达式。for循环的任何位置都可包含多个表达式,只要使用逗号分隔这些表达式。例如,使用以下形式开始的for循环


for(i=0,j=0;i<10;++i)

……


在循环开始前,将i的值设为0,将j的值设为0。两个表达式i=0和j=0通过逗号隔开,而且两者都是循环的init_expression部分。另一个例子,开始于


for(i=0,j=100;i<10;++i, j-=10)

……


的for循环设置了两个索引变量:i和j,在循环开始之前,它们分别被初始化为0和100。每次执行完循环体之后,i的值加1,j的值减10。

就像可能希望for循环的特定字段包含多个表达式一样,可能还需要省略语句中的一个或多个字段。通过省略指定的字段并使用分号标记其位置,可简单地实现这一点。省略for语句中某个字段的最常见情形发生在无需计算初始表达式的值时。在这种情况下,init_expression字段可简单地保留空白,只要仍然包括分号即可,如下所示:


for(;j!=100;++j)

……


如果在进入循环之前已经将j设置了初始值,则可采用这条语句。

省略looping_condition字段的for循环可有效地设置无限循环,就是理论上执行无限次的循环。只要有其他方式退出循环(例如,执行renturn、break或goto语句,将在本书后面讨论),就可以使用这一循环。

在for循环中,还可定义一个变量作为初始表达式的一部分。使用以前定义变量的传统方式可实现。例如,下面的语句可用于设置for循环,它定义了整形变量counter并将其初始化为1,如下所示:


for(int counter=1;counter<=5;++counter)


变量counter只在for循环的整个执行过程中是已知的(它名为局部变量),并且不能在循环外部访问。作为另一个例子,for循环


for(int n=1,triangularNumber=0;n<=200;++n)

triangularNumber+=n;


定义了两个整型变量,并相应地设置了它们的值。

最后一种for循环变化可在对象集合上执行所谓的快速枚举,第15章“数字、字符串和集合”会详细介绍此内容。