2.6.4 for循环结构

    如果需要不断地重复执行某个动作,那么循环结构才会派上用场。for循环结构的基本形式如下所示。


    for(初始化表达式;判断表达式;修正表达式) 语句;//循环体

    for语句执行过程如下:首先计算“初始化表达式”(循环初值),且仅计算一次;每一次循环之前计算“判断表达式”(循环条件),如果其结果为true(或非0值),则执行“语句”(循环体),并计算“修正表达式”(循环增量),否则,循环终止,程序跳出for结构。

    此处的循环体可以是单条语句,也可以是由花括号包裹的块语句,图2.10是for循环执行过程的示意图。

    代码2.27 用于输出0~9这10个数字,首先执行初始化表达式,将int型变量i初始化为0,接下来计算判断表达式,i<10,因为1<10成立,返回结果为true,所以执行循环体,输出1,然后执行修正表达式,i++,将i的值更新为2,再次计算判断表达式,i<10,因为i为2,2<10依旧成立,结果仍为true,执行循环体,依次类推,直到i=10,判断表达式不再满足,for循环结构终止,程序跳到for循环结构后面的语句。

    2.6.4 for循环结构 - 图1

    图 2.10 for循环执行过程示意图

    代码2.27 for循环结构ForSample1


    <—————————————文件名:example227.cpp——————————————> 01 #include<iostream> 02 int main() 03 { 04 using namespace std; 05 int i; 06 for(i=0;i<10;i++)//从0~9,循环执行10次 07 { 08 cout<<i<<""; 09 } 10 return 0; 11 }

    【代码解析】代码第6行,使用了for语句来实现循环结构。

    输出结果如下所示。


    0 1 2 3 4 5 6 7 8 9

    注意

    代码2.27 中的循环体只有一行语句,即cout输出操作,for循环结构中的花括号可省略,但for语句后加花括号是一种良好的编程风格,能对程序员起到提醒作用,方便代码阅读和修改,但本书为了缩减篇幅,对单条语句不再使用花括号。

    实际上,循环控制变量(或称索引变量)的声明也可以放在初始化表达式中,代码2.27中如下所示。


    int i; for(i=0;i<10;i++) { …… } 等价于 for(int i=0;i<10;i++) { …… }

    关于for结构有以下几点要特别注意。

    (1)for结构中的3个表达式语句只是语法上的要求。如果不需要循环控制变量,或其声明及其他一些初始化已经由for结构前的语句完成,初始化表达式可以为空。当判断表达式为空时,默认为true。修正操作也可以放在循环体中,而将修正表达式留空。代码2.27与下列代码是等价的。


    01 #include<iostream> 02 int main() 03 { 04 using namespace std; 05 int i=0; 06 for(;i<10;) 07 { 08 cout<<i<<""; 09 i++; 10 } 11 return 0; 12 }

    (2)新的C++标准规定:在初始化表达式中声明的循环控制变量,只存在于for结构中,也就是说,当程序离开for循环时,变量就消失了。但有些C++遵循的是以前的规则,把在初始化表达式中声明的变量视为在循环之前声明的,因此,在循环结束后,变量仍可用。关于变量的生存期、作用域和可见域的详细介绍请参考第6章。

    说明

    对VC系列来说,7.1版之前的版本默认遵守老式规则,这主要是因为原有的很多代码都是基于旧式规则编写的,而7.1版之后的编译器能够接受新旧两种规则。