C中的意外输出(递归)

int main(void) { static int=5; if(--i) { main(); printf("%d",i); } } 

以上程序的输出是—

0000

但我认为应该是—

1234

我不知道为什么?请帮助我。

零的原因是在第一个printf语句运行之前i减小到零。 当它展开时,它每次打印i(仍为零)。

最好使用main()调用并传递参数的单独函数(然后将参数传递给每个调用而不是使用静态变量)。

  1. 您将静态变量i设置为5
  2. 你在main递归,直到i变为零。
  3. 递归在i为零的情况下展开。
  4. 然后调用printf

答案就在于此。

您可以使用调试器来certificate这一点