c-存储类:理解静态



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

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

输出为0 0 0 0

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

谢谢!

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

如果不选择i作为static,程序将陷入对main()的无限调用中,因为在每次调用中,都会有值为5的新i。当再次调用main()时,printf()语句被推送到堆栈上,稍后当i变为0时,所有printfs都打印i的值,即0。

相关内容

  • 没有找到相关文章

最新更新