int main(void) {
static int=5;
if(--i) {
main();
printf("%d",i);
}
}
上述程序的输出是---
0000
但我认为应该是——
1234
我不知道为什么?请帮助我。
零的原因是在第一个语句运行i
之前减少到零。printf
当它展开时,它每次都打印 i (仍然为零)。
最好使用一个单独的函数来main()
调用并将参数传递给(然后将参数传递给每个调用而不是使用静态变量)。
i
为 5main
直到i
变为零。i
零展开。printf
答案就在于此。
您可以使用调试器来证明这一点
[First call: i->4 and call main()]
[Second call: i->3 and call main()]
[Third call: i->2 and call main()]
[Fourth call: i->1 and call main()]
[Fifth call: i->0 and condition false as it gives 0.]
现在是打印 i 值的时候了,它是 main() 之后的下一行。控制返回到第四次调用以打印 i 的值。
[Fourth Call: printing value of i which is 0.]
[Third call: printing value of i which is 0.]
[Second call: printing value of i which is 0.]
[First call: printing value of i which is 0.]