存储类:了解静态

时间:2013-11-19 18:32:23

标签: c static output storage-class-specifier

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

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

输出为0 0 0 0

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果您不选择istatic,则该计划将无法拨打main(),因为在每次通话中都会有新的i值为5.再次调用main()时,printf()语句被压入堆栈,稍后当i变为0时,所有printfs都会打印i的值,即0。