我正在执行用C编写的代码,它给出了意想不到的结果,我无法弄明白。为什么我打印五次的价值?
以下是以下代码:
#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
答案 0 :(得分:0)
输出没有问题。
由于在第五次调用main时没有任何反应,i的值现在仍然是4,但是由于你通过i ++增加了i,所以我在printf()现在是5,因为这是我使用的时间在增加之后。 Printf显示:
5
计数通过++计数递增(++计数表示该值立即递增,因此计数现在为1)。 Printf显示:
1
现在递归循环结束。对于每个“级别”行
main();
完成调用,所以下一行是
printf("%d\n", i);
因为我们永远不会改变i的值(因为对于所有“级别”我们已经将i增加到5),控制台向我们显示变量i的值5的5倍。
我们唯一仍然改变的是变量计数。由于在递归调用main之后变量计数仍在递增,因此count仍然加起来为5.因此输出如下所示:
5 (i, level 5)
1 (count, level 5)
5 (i, level 4)
2 (count, level 4)
5 (i, level 3)
3 (count, level 3)
5 (i, level 2)
4 (count, level 2)
5 (i, level 1)
5 (count, level 1)