for(i=5;--i;)
printf("%d ",i);
我得到的输出是正确的,这是4 3 2 1.第3个子句中没有i> 0条件,所以当i = 0时循环如何停止?
答案 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>