for循环的三个表达式

来源:互联网 发布:2017网络最新最火的词 编辑:程序博客网 时间:2024/05/16 04:58

首先我们我来一段代码,看看它有什么错误:

for(i = 0,printf("First = %d\t",i);i < 5,printf("Second = %d\t",i);i++,printf("Third = %d\t",i)){printf("Fourth = %d\n",i);}

有没有感觉for循环里面的表达式好复杂,但是语句绝对没有错误编译没有错误,但是运行呢?

但是是一个死循环,一直都跳不出来。

问题在于for循环的语句形式是:

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

而表达式1和表达式2都是逗号表达式,逗号表达式的用法不细说了,最终的值是最后一个表达式的值。

也就是printf这个函数的返回值,printf的函数的返回值是打印出来的字符的个数

来看我调试的结果:

当i=0时,for循环体内执行后:

1)执行表达式3: i++; i=1,printf表达式的值是“Third = 1”数一下是9个字符,有两个空格,别忘了还有后面的“\0”,总共是10个字符。

2)然后计算表达式2: i<5, printf表达式的值是“Second = 2”是11个字符,表达式=11,为真,进入循环体。

3)执行循环体输入i,然后再是表达式3,i++; i=2;

因为表达式2的值永远为真,所以循环一直在运行,我改了一下可以参考:

int main(){int i;for(i=0;i<3;i++){printf("i=%d\n",i);}for(i = 0,printf("First = %d\t",i);printf("Second = %d\t",i),i < 5;i++,printf("Third = %d\t",i)){printf("Fourth = %d\n",i);}printf("\n");printf("2/(-2) = %d\t",2/(-2));printf("2%%(-2) = %d\t",2%(-2));system("pause");return 0;}

看一下运行结果:

说明:

1)表达式1的first是赋初值,只执行一次。

2)表达式2Second是条件判断,条件满足执行循环体,然后再是表达式3,注意顺序。

3)从结果可以看出第一次的顺序是1,2,4,3  再后面的顺序是:

     2(表达式2),4(循环体),3(表达式3)

     2(表达式2),4(循环体),3(表达式3),

     直到最后判断表达式2的结果为假,循环退出。

 

0 0