C中的意外输出(递归)
int main(void) { static int=5; if(--i) { main(); printf("%d",i); } }
以上程序的输出是—
0000
但我认为应该是—
1234
我不知道为什么?请帮助我。
零的原因是在第一个printf
语句运行之前i
减小到零。 当它展开时,它每次打印i(仍为零)。
最好使用main()
调用并传递参数的单独函数(然后将参数传递给每个调用而不是使用静态变量)。
- 您将静态变量
i
设置为5 - 你在
main
递归,直到i
变为零。 - 递归在
i
为零的情况下展开。 - 然后调用
printf
答案就在于此。
您可以使用调试器来certificate这一点