首页 > 解决方案 > 意外的答案

问题描述

我参加了 Udemy 的 C 高级课程,从那里有一个问题:以下代码的输出是什么?

#include <stdio.h>

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

正确答案是4 3 2 1,但是当我在我的 IDE(和在线编译器)中运行这段代码时,它会打印0 0 0 0. 在课程中,讲师使用 cygwin 编译器,我有 g++。可能是不一致的原因吗?另外我想知道if(--i)方法是否比for性能概念循环更快?

谢谢你。

标签: cperformanceg++cygwin

解决方案


发布的代码应打印0 0 0 0,因为printf在递归调用之后,即

    main();            // Recursive call
    printf("%d ", i);  // Print after

如果您改为:

    printf("%d ", i);  // Print before
    main();            // Recursive call

输出将是4 3 2 1

所以我认为您的讲师使用了最后一种形式,而您使用了第一种形式,即不同的代码,不同的结果


推荐阅读