关于下面给出的查询的输出

时间:2018-08-08 14:41:29

标签: c

该程序的输出为4 3 2 1。 当没有条件给我时,为什么它停在1? main(10)和main(i)有区别吗?

#include <stdio.h>
int main()
{
    static int i = 5;
    if (--i){
        printf("%d ", i);
        main(i);
    }
}

2 个答案:

答案 0 :(得分:4)

您实际上有一个条件:

if (--i)等效于if(--i != 0)

答案 1 :(得分:1)

等效代码

#include <stdio.h>
int main()
{
    static int i = 5;
    i = i - 1;
    if (i != 0){
        printf("%d ", i);
        main(i);
    }
}

堆栈跟踪

i=5, print 4, call main(4) 
    i=4, print 3, call main(3)
        i=3, print 2, call main(2)
            i=2, print 1, call main(1)
                i=1, if(i--) is false, returns
            returns
        returns
     returns
returns