For的死循环(逗号表达式)

实例一

for(i=0 ,printf(“First=%d \n”,i );
 i<10 ,printf(“Second=%d \n”,i );
 i++ ,printf(“Third=%d\n”,i ))
 {
 printf(“Fourth=%d \n”,i);
 }

在学习逗号表达式的时候,我看到了上面的一个例子,拿到编译环境进行调试的时候,发现竟然是一个死循环。我就纳闷了,这个不就是一个普通的死循环加上了输出语句,为何就变成了死循环呢?

运行结果如下:

for 死循环python for死循环语句例子_死循环

为了避免错误,我把for循环中的输出语句全部删除,变成了下面的样子:
实例二:

for(i=0 ;
 i<10 ;
 i++ )
 {
 printf(“Fourth=%d \n”,i);
 }

咦?这样就可以正常输出,为什么会这样呢?
我单步调试了实例一,发现当i>10之后,还是继续循环,这是为什么呢?
我仔细分析了for循环的结构,如下:
for(<初始化>;<条件表达式>;<增量>)
感觉 问题应该出现在条件表达式这块儿,因为只有在这个地方,才会判断有没有继续循环的必要。于是,我只是咋条件表达式的地方加上输出语句,如下:
实例三:

for(i=0 ;
 i<10 ,printf(“First=%d \n”,i );
 i++ )
 {
 printf(“Fourth=%d \n”,i);
 }

发现这样就成了死循环,我突然意识到了上面的条件表达式是一个逗号表达式,而逗号表达式的最终结果是最后一个表达式的值,这也就是说是printf的返回值,暂且先不说printf的返回值,我先把输出语句放到了(i<10)前面,如下:
实例四:

for(i=0 ;
 printf(“First=%d \n”,i ),i<10 ;
 i++ )
 {
 printf(“Fourth=%d \n”,i);
 }

发现输出结果正常。这么说的话,应该是printf的返回值的问题,我上网搜了一下,发现printf的返回值是输出的字符的个数,这样,问题也就清楚了,每次输出的时候,只要可以输出正常的话,printf的返回值都是>0的数,而大于0的数都是作为正的,所以,条件成立,这样,循环会继续进行,所以,就出现了上面的死循环了。

这么说的话,程序改成下面的样子就是对的了:

实例五:

for(i=0 ,printf("First=%d ",i );
 printf("Second=%d ",i ),i<10 ;
 i++ ,printf(“Third=%d\n”,i ))
 {
 printf("Fourth=%d ",i);
 }
 //output

运行结果

for 死循环python for死循环语句例子_i++_02