【问题标题】:Why does this program not run infinitely? [duplicate]为什么这个程序不能无限运行? [复制]
【发布时间】:2013-09-28 15:39:42
【问题描述】:

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

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

【问题讨论】:

  • 您的问题真的是“--i 是什么意思?”,而不是“为什么这不能无限运行?”?
  • @OliCharlesworth 嗨,不,我知道 --i 是什么意思。我想知道如何在 if 条件下使用它?它会一直运行到 i 变为 0 吗?
  • 不,它以递归方式工作,并且仅因为 i 是 static int 而工作。
  • “--i 做什么以及将 i 声明为静态的效果是什么?” - 也许阅读语言规范?

标签: c printf


【解决方案1】:
  1. static int 不会每次都重新初始化。因此,每次调用 main() 时,i 都会小一。
  2. 当(--i) 为零时,递归循环终止。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多