在编写程序中,通常都会用用到For循环,那么到底For语句是如何执行的?

当然,有一定编程经验的人都会知道,for语句是一个实现循环执行的程序块,for结构一般大致如:

    for(表达式1;表达式2;表达式3)语句;

或者

for(表达式1;表达式2;表达式3){
          语句块;
}

其中,表达1一般是用于变量的初始化;表达式2主要是用于控制循环,如果表达式2的计算结果是true,则继续执行循环体,否则结束循环;表达式3一般用于变量的自增运算;

例如,简单的输出1到10的。程序为:

for(int i=1; i<=10; i++)  printf("%d",i);

在上面的程序中,在执行for(int i=1; i<=10; i++) 括号里边的表达式时,表达1、2、3到底执行了吗?或者说执行情况怎么样?

下面看一个例子程序:

int x = 10; int y = 10; int i = 10;
 for(i=0;x>8;y=i++){
       printf("%d,%d,%d\n",x-- , i , y);
 }

执行结果为:

10,0,10

9,1,0

 显然,第一行结果中可见,i ==0,已经执行;x>8已经执行,才输出结果;但y==10,并没有执行y=i++。第二行结果,才显示出i==1,y==0。

 

其实从for(int i=1; i<=10; i++)  printf("%d",i);的运行结果中,输出1,2,3,……,10;比如第一次循环时,输出i==1,可见表达式3i++,根本还没执行。

 

问题解因:

for循环语句的真正执行过程为:

1)先求解表达式1;

2)求解表达式2,若结果为真,则执行循环体的语句或语句块,否则结束循环;

3)求解表达式3;

4)跳回到步骤2)步骤继续执行;

5)循环结束,执行for语句之后的语句。

 

由上述,表达式3是在执行循环体语句或语句块后,才得以执行的,这是为什么例子程序不执行y=i++的原因。