Sry我是C语言的新手。有人能帮我理解"for"循环中发生了什么吗:
当我运行这个代码时,我什么都没有得到,它甚至没有进入循环:
for( count=0 ;count--;count--)
{
printf("n%5d", count);
}
当我运行这个代码时,我会得到无限的循环入口:
for( count=1 ;count--;count--)
{
printf("n%5d", count);
}
当我运行这个代码时,我得到了一个进入循环的入口:
for( count=2 ;count--;count--)
{
printf("n%5d", count);
}
依此类推,对于每个计数=奇数,我得到无限个入口,对于每个计数器=偶数我得到有限数量的入口
有人能解释一下为什么会这样吗?
-
for(left;middle;right)
中间表达式是条件-一个在上下文中可转换为布尔的表达式。该表达式在每次迭代之前进行求值,如果它产生false(在int的情况下为0),则退出循环。 -
foo--
是后置运算符,这意味着值是foo
先求值,然后递减。
把这两者放在一起,
情况1:在进入循环之前,计算count。计数当前值为0。因此不执行循环。
第2种情况:计数——计算结果为1,循环输入一次。count——在循环结束时执行。count——现在在循环开始时计算为-1,因此循环再次执行,依此类推——无限
Case3:count是2,循环结束计数是0,所以循环在1次迭代后退出。
我认为您首先需要确切地知道count--
是什么。这意味着第一个count
将作为条件的一部分进行计算,然后递减。这意味着count--
在这种情况下是0
,使得for循环条件评估为0
。评估条件后,count
为-1
,但这并不重要,因为在条件检查期间计数为0
,因此循环永远不会运行。
for(count = 0;count--;count--)
{
printf("n%5d", count);
}
下一个循环从1
开始计数,这意味着count--
将被评估为1
,这使得for循环的条件检查等于1
。在评估之后,计数变为0
。这意味着for循环将输入并打印出消息。当代码块结束时,执行语句count--
,将count
设置为-1
。然后我们再次检查。我们看到count--
的求值结果为-1
,因此我们将再次循环。评估后,count
将被设置为-2
,我们将再次进入for循环这个函数永远运行,因为当我们到达for循环检查时,计数总是奇数,因此计数永远不可能是0
,我们永远不会脱离循环
for(count = 1;count--;count--)
{
printf("n%5d", count);
}
你现在应该能够弄清楚为什么最后一个只运行一次:
for( count=2 ;count--;count--)
{
printf("n%5d", count);
}
显然,在第一次评估之后,count
会递减。然后,一旦代码块被执行,它就会再次递减。因此,当我们在for循环中进行条件检查时,count
就是0
,我们中断。