0

这个程序不应该无限运行,因为每次都调用 main 吗?为什么它的输出是0 0 0 0?我知道这是一个菜鸟问题,但我无法得到它。--i将 i 声明为静态的有什么作用?

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

2 回答 2

4
  1. static int不是每次都重新初始化。因此,每次调用 main() 时,i 都会小一。
  2. (--i)为零时,递归循环终止。

因此,它从 开始i=5,并调用一个新副本。这个有i=4,它再次调用一个新副本。这一直持续到i=0,此时函数刚刚终止。然后控制流返回调用堆栈,每个mainprints副本i,现在是 0。4 个副本意味着 4 个零。

于 2013-09-23T16:37:31.647 回答
0

它不会永远运行的原因是因为在某些时候i变为 0 并且不再调用 main。诀窍是static它引用相同的内存位置,因此每次main递归调用时都会递减。

于 2013-09-23T16:37:12.567 回答