1

我无法理解这个程序的输出 -

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

输出为 0 0 0 0

我的疑问是为什么在第一次调用 main 时不会初始化静态?如果我假设静态在第一次调用 5 时被初始化,然后在调用之间共享,则输出应该是 4 3 2 1

谢谢!

4

2 回答 2

1

在调用任何语句之前,对 to 的调用main()被递归调用 4 次。printf()到第一个printf()被调用时,--i已经被递归调用了 4 次。由于i是静态的,它的值为 0 在这一点上,这就是打印的值。

于 2013-11-19T18:37:52.230 回答
0

如果不选择ibe static,程序将陷入无限调用,main()因为在每次调用中,都会i有值为 5 的new 。main()再次调用时,该printf()语句被压入堆栈,然后当i变为 0 时,所有printfs 打印 i 的值,即 0。

于 2013-11-19T18:38:19.027 回答