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

上述程序的输出是---

0000

但我认为应该是——

1234

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

4

3 回答 3

3

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

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

于 2013-09-04T20:13:58.077 回答
2
  1. 您将静态变量设置i为 5
  2. 你递归main直到i变为零。
  3. 递归以i零展开。
  4. 然后调用printf

答案就在于此。

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

于 2013-09-04T20:14:10.727 回答
-1
  [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.]
于 2019-04-15T16:22:17.570 回答