【发布时间】:2017-07-30 10:29:26
【问题描述】:
我正在执行一个用 C 编写的代码,它给出了我无法弄清楚的意外结果。为什么I打印的价值是5倍?
下面是代码:
#include <stdio.h>
void main() {
static int i = 0;
static int count =0;
if (i<5){
i++;
main();
printf("%d\n",i);
++count;
printf("%d\n",count);
}
}
这是输出:
5
1
5
2
5
3
5
4
5
5
【问题讨论】:
-
void main()是非常非标准的 C。养成编写符合标准的代码的习惯。int main(void). -
我的评论与(正确)结果无关。使用调试器跟踪代码。
-
这段代码没有什么意外的。您提出的一个更好的问题是您期望输出是什么?
-
i的值被打印 5 次,原因与count的值被打印 5 次相同——这是因为main()函数被显示的代码调用了 5 次, 再加上一次启动代码,其中一个调用发现i < 5不正确,从而终止递归。 -
正如@JonathanLeffler 所述,一旦递归停止,'i' 为 5',则不再调用
main()代码连续退出递归。在每一步,递归调用main()之后的代码都会被执行。因此,“i”中包含的值被打印(5),然后“count”递增并打印 I.E。 'i 中的值,计数中的值' (5, 1), (5, 2), (5, 3), (5, 4), (5, 5)。如果您已将要打印的每个值标记为该值的来源,那么正在发生的事情会更加明显
标签: c