为什么这个程序无法无限运行?

时间:2013-09-23 16:32:19

标签: c printf

这个程序不应该无限运行,因为每次都调用main吗?为什么它的输出是0 0 0 0?我知道这是一个菜鸟问题,但我无法得到它。 --i做什么以及宣布我是静态的效果是什么?

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

2 个答案:

答案 0 :(得分:4)

  1. static int每次都不会重新初始化。因此,每次调用main()时,我都会低一个。
  2. (--i)为零时,递归循环终止。
  3. 因此,它从i=5开始,并调用一个新副本。这个有i=4,再次调用新副本。这一直持续到i=0,此时函数才会终止。然后控制流返回调用堆栈,main的每个副本都打印i,现在为0.4副本,意味着4个零。

答案 1 :(得分:0)

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