【问题标题】:understanding static int execution [duplicate]理解静态int执行[重复]
【发布时间】:2015-12-30 14:58:05
【问题描述】:
#include <stdio.h>

int main()
{
    static int i = 5;

    if(--i){
        main();
        printf("%d,", i);
    }

    return 0;
}

我无法找到为什么i 的值每次都变为 0。

【问题讨论】:

  • 递归main()....我不喜欢奇怪的东西.. :)
  • 变为零是因为你减少了?问题是否可能是您对static 局部变量如何工作的理解?也许是理解递归的问题?为了更好地理解递归,您应该学习如何使用调试器以及如何逐行跳过代码,更重要的是逐步进入函数调用。这样做,它就会变得清晰。
  • 将if中的2行切换一下看看会发生什么
  • 逐行写出代码,将main 替换为实际执行的代码,这样你就得到了1个程序函数。这会有意义
  • main 中有一个static int 没有什么意义,除非它递归,这是不明智的行为

标签: c recursion static


【解决方案1】:

在您的代码中有一个recursive callmain(),直到if(--i) 不降为0。打印语句没有机会执行。

一旦i 变为零,控件就会返回,然后i 的值就是0。

[我现在手边没有照片编辑器,抱歉]

尝试查看粗略的图形以获得想法。

FWIW,i 拥有static 存储空间,因此它持有跨越函数调用。

我假设最后一部分已经理解,只是为了清楚起见而添加。

【讨论】:

【解决方案2】:

这是您的程序的执行和值:

i = 5; --i; main ()// i==4
i = 4; --i; main ()// i==3
i = 3; --i; main ()// i==2
i = 2; --i; main ()// i==1
i = 1; --i; // i == 0 ,main is not called!

然后程序才从递归中返回:

printf("%d,", i);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 2011-02-28
    相关资源
    最近更新 更多