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

C语言前置与后置自增问题:为何y、z前置自增未执行?

C语言逻辑运算符短路求值问题解析

题目

假设x、y、z均为整型变量,执行以下代码后,x、y、z的输出结果是什么?

int x=6, y=4, z=2;
printf("%d ", ++x || ++y && ++z);
printf("%d %d %d", z, y, x);

选项:

  • (A) 0 6 4 2
  • (B) 1 7 4 2
  • (C) 1 2 4 6
  • (D) 1 2 4 7

疑问

为何答案为D,且y和z的前置自增运算符未生效?

解析

核心原因是C语言中逻辑运算符的短路求值特性,结合规则分析如下:

  1. 短路求值触发逻辑
    逻辑或(||)的短路规则是:只要左边表达式结果为真(非0),右边表达式会直接被跳过执行——因为逻辑或只要有一个操作数为真,整个表达式结果就为真,无需再计算后续部分。
    这里++x是表达式左半部分:x初始值为6,执行++x后x变为7,7是非零值,在C语言中被判定为真。因此右边的++y && ++z完全不会执行,y和z的自增操作根本没机会运行,保持初始值4和2不变。
  2. 输出结果拆解
    • 第一个printf输出整个逻辑表达式的结果,C语言中用1表示真,所以先输出1 。
    • 第二个printf按顺序输出z、y、x的值,也就是2 4 7。
      两者结合起来就是1 2 4 7,对应选项D。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:42:31