第二个子句中的for循环条件,第三个子句中没有条件

时间:2017-12-09 15:50:37

标签: c

for(i=5;--i;)
 printf("%d ",i);

我得到的输出是正确的,这是4 3 2 1.第3个子句中没有i> 0条件,所以当i = 0时循环如何停止?

4 个答案:

答案 0 :(得分:2)

在C中,false值由0表示,而任何非零值表示为true。在这个循环中--i;充当条件。当i变为0时,它充当错误的布尔值,循环终止。

答案 1 :(得分:0)

--i最终证明是0。因此情况变得错误。

因为,“第三条款”是空的,没有任何有趣的事情发生。 “第二条款”是进行条件检查的地方。并且--i在第五次迭代中评估自己为0

答案 2 :(得分:0)

for(i=5;--i;)
 printf("%d ",i);

相当于:

for(i=5; --i; i )
     printf("%d ",i);

for(expression1; expression2; expression3 )
     do_something

for语句评估值{0}的expression2以继续执行do_soemthing。它将持续到expression2 == 0;

答案 3 :(得分:0)

你没有注意到你的循环从4而不是5开始!

in for statement

for (expr1;expr2;expr3) 

expr1在循环开始时执行,并且在迭代期间永远不会执行

检查

expr2 true any-none-zero-value ;在每次迭代之前,如果此表达式为false或0,则循环将停止。

expr3在迭代完成后执行。

因此,在您的情况下,您没有任何第三个表达式,并且检查 0 false 的第二个表达式在四次迭代后最终将变为零< / p>