You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何以下C语言代码输出8,5,2而非7,4,1?

解析C语言for循环的执行顺序问题

先看你给出的代码:

int fun();

int main()
{
    for (fun(); fun(); fun())
    printf("%d\n", fun());
    return 0;
}

int fun()
{
    int static n = 10;
    return n--;
}

你的预期错误源于对for循环执行顺序的误解,我们一步步拆解执行流程:

C语言中for(表达式1; 表达式2; 表达式3)的严格执行顺序是:

  1. 仅执行一次表达式1:完成初始化操作,这里调用fun(),返回10(此时n变为9),这个返回值会被直接忽略,因为表达式1不需要参与条件判断。
  2. 执行表达式2:作为循环的入口条件,这里调用fun(),返回9(n变为8)。由于返回值非0,进入循环体。
  3. 执行循环体:也就是printf("%d\n", fun());,这里调用fun(),返回8(n变为7),所以printf输出的是8——这就是你看到的实际结果。
  4. 执行表达式3:完成循环后的增量操作,这里调用fun(),返回7(n变为6)。
  5. 回到步骤2,再次执行表达式2判断是否继续循环,直到表达式2返回0时终止。

你之前误以为表达式3会在循环体之前执行,或者错误关联了各fun()调用的返回值对应关系,但实际上循环体的执行早于表达式3,所以printf调用fun()时拿到的是表达式2执行后n递减一次的值,也就是8。

内容的提问来源于stack exchange,提问作者bharath2438

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:04:56