算是温习吧。问题比较基础,但是也比较重要。
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
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow