for循环语句头的执行顺序

来源:互联网 发布:linux ed2k 下载工具 编辑:程序博客网 时间:2024/05/17 04:37

算是温习吧。问题比较基础,但是也比较重要。

for循环可以说在每个程序中都少不了的,语句头包括三个部分:初始化,判读条件,一个表达式。

但是这三个部分的执行顺序是什么,这是我们所关心的,也是本文所要讨论的。

下面先看一段简单的代码。

#include <stdio.h>int main(){    int x, a;        for (x=0,a=0; a<=1 && !x++; a++)    {        a++;    }        printf("%d", a);    return 0;}

代码很简单,可是打印结果呢?

有的朋友可能会想当然的认为,  打印结果是1.

可是,真的是1吗?   复制到编译器上跑跑,奇迹般的发现,其实是2.

下面就分析下这简单代码。


第一步:初始化定义,x = 0, a = 0;

第二步:a小于1, x 的非为1,符合循环条件

第三步:x++后x自增为1.

第四步:进入循环体,a++,a自增为1.

第五步:执行循环语句头中的a++,a自增为2.

第六步:执行循环语句头的判读条件,a=2>1,故不满足,不执行循环语句。

第七步:打印a的值为2.


怎么样,现在豁然开朗了吧。(如果还是不懂...那就抱歉了。)


从这个例子,我们可以得出如下结论:

执行顺序是:初始化--判断--函数体——然后for循环的第3句--判断——函数体---for循环的第三句--判断……


下面解答几点疑惑:

1、第一次例如初始化i=0,是否还执行后面的i++或++i?

第一次先初始化,然后判断,i++就不执行了

2、第一次完了以后,初始化这句就不用了,是先执行i++还是限制性判断语句呢?

先执行i++

3、现在知道是先执行i++,再执行判断语句,i++不是后++吗,例如i为1,那i++后执行判断语句,i是几呢?

i是2.

4、好像i++和++i在for()里时结果都一样。

都一样,for语句头的执行顺序决定了这两个写法都一样,都是i++或这++i这两句执行完了再进行判断,此时(两种情况)i已经加1了。


分析了这么多,相信大家也都懂了。

留个经典的例子,让大家自己去分析吧。

#include <stdio.h>int main( ){    int i = 0, j = 10;    for(i=0; i<j; i++,j--)    {        if(j==10)        {            printf("%d,%d ",i,j);            j--;        }        j++;    }    printf("%d,%d ",i,j);    return 0;}

打印结果:

0,10 9,9 

如果不懂的,可以参照下面这个对上述例子逐句打印的例子,应该会有助于理解。

#include <stdio.h>int print1(int i,int j){    printf("执行判断条件,i=%d,j=%d \n",i,j);    return 1;}int main( ){    int i = 0, j = 10;        for(i=0;((print1(i,j)) && (i<j));        i++,j--,printf("执行for()中的第三个语句,i=%d,j=%d \n",i,j))    {        if(j==10)        {            printf("%d,%d ",i,j);            j--;        }        j++;        printf("执行for循环体中的最后一句,i=%d,j=%d\n ",i,j);    }    printf(" %d,%d ",i,j);    return 0;}

打印结果:

执行判断条件,i=0,j=10 

0,10执行for循环体中的最后一句,i=0,j=10

 执行for()中的第三个语句,i=1,j=9 

执行判断条件,i=1,j=9 

执行for循环体中的最后一句,i=1,j=10

 执行for()中的第三个语句,i=2,j=9 

执行判断条件,i=2,j=9 

执行for循环体中的最后一句,i=2,j=10

 执行for()中的第三个语句,i=3,j=9 

执行判断条件,i=3,j=9 

执行for循环体中的最后一句,i=3,j=10

 执行for()中的第三个语句,i=4,j=9 

执行判断条件,i=4,j=9 

执行for循环体中的最后一句,i=4,j=10

 执行for()中的第三个语句,i=5,j=9 

执行判断条件,i=5,j=9 

执行for循环体中的最后一句,i=5,j=10

 执行for()中的第三个语句,i=6,j=9 

执行判断条件,i=6,j=9 

执行for循环体中的最后一句,i=6,j=10

 执行for()中的第三个语句,i=7,j=9 

执行判断条件,i=7,j=9 

执行for循环体中的最后一句,i=7,j=10

 执行for()中的第三个语句,i=8,j=9 

执行判断条件,i=8,j=9 

执行for循环体中的最后一句,i=8,j=10

 执行for()中的第三个语句,i=9,j=9 

执行判断条件,i=9,j=9 

 9,9 


原创粉丝点击