理解静态int执行

时间:2015-12-30 14:58:05

标签: c recursion static

#include <stdio.h>

int main()
{
    static int i = 5;

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

    return 0;
}

我无法找到每次i的值变为0的原因。

2 个答案:

答案 0 :(得分:3)

代码中有一个recursive callmain(),直到if(--i)没有达到0. print语句没有机会执行。

一旦i变为零,控件返回,i的值为,0,则为。

[我现在没有照片编辑器,对不起]

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

enter image description here

FWIW,i正在拥有static存储空间,因此函数调用中持有

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

答案 1 :(得分:3)

这是你的程序的执行和价值观:

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);