C 中有这段代码
int fun()
{
static int num = 40;
return num--;
}
int main()
{
for(fun(); fun(); fun())
{
printf("%d ", fun());
}
getchar();
return 0;
}
输出结果为:38 35 32 29 26 23 20 17 14 11 8 5 2
我无法弄清楚为什么程序不继续打印超过 2。即在负数中。它不应该继续打印 ... -1 -4 -7 ....无限循环可以吗有人解释一下吗?
最佳答案
fun()
在此处计算为 0
:
for(fun(); fun(); fun())
// ^
0
等同于 C 中的 false
,因此循环正在退出。
代码依赖于 num - 1
是 3 的倍数这一事实,因为 fun()
在循环开始时计算一次,然后计算 3 次每个循环。例如,如果您将定义更改为
static int num = 41;
fun()
会在错误的地方返回 0
,您的循环会继续进入负数。
关于c - 无法理解 C 程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24935463/