c - 意外的答案
问题描述
我参加了 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
性能概念循环更快?
谢谢你。
解决方案
发布的代码应打印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
所以我认为您的讲师使用了最后一种形式,而您使用了第一种形式,即不同的代码,不同的结果
推荐阅读
- android - android - 更改 MaterialToolbar 菜单项图标颜色
- python - Python(Redmine 集成)导致大量内存泄漏 - 不知道为什么/
- laravel - 动态验证
- powershell - PowerShell - 匹配 CSV 文件中的多个字符串条目
- javascript - 在 Promise 中包装异步函数
- python - Tensorflow Keras LSTM 推断一次输入一个
- c++ - 使用向量的元素平衡目标权重
- ios - Swift:具有突变的结构并通过单击按钮更新枚举值
- networking - 当 pod 通过目标 pod 位于同一主机上的服务与 pod 通信时,kubernetes 是否使用 conntrack 两次?
- c# - 如何以编程方式在 startup.cs 中检索与 services.AddControllers 一起使用的 AspNetCore Mvc 过滤器列表(FilterCollection 的类型)?