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

为何这段C语言代码中x、y未递减?输出为2 2的原因

问题解析:为什么代码输出是22(而非0 0)

先明确两个核心知识点:

  • 后置自增运算符x++:先返回变量当前值,再将变量加1
  • 后置自减运算符x--:先返回变量当前值,再将变量减1

现在一步步拆解代码的执行流程:

  1. 变量初始化

    int x = 1, y = 1;
    

    此时x=1,y=1。

  2. if条件判断

    if(x++ == y++)
    
    • 第一步:取x的当前值1、y的当前值1,比较1 == 1,结果为真。
    • 第二步:完成自增操作,x变为2,y变为2。
    • 因为条件为真,代码会执行if分支的printf,而非else分支(你认为else被执行可能是误解了运行结果,或是代码实际有改动)。
  3. if分支的printf执行

    printf("%d%d", x--, y--);
    
    • 第一步:取x的当前值2、y的当前值2传递给printf,所以输出22。
    • 第二步:完成自减操作,x变为1,y变为1。

你预期输出0 0的误区

你混淆了后置与前置运算符的逻辑:

  • 前置运算符++x是先修改变量再返回值,而后置x++是先返回当前值再修改变量。
  • 你误以为x--会先把x减到0再输出,但实际上是先输出当前值2,再将x减到1。

验证printf中递减操作是否执行

如果在原代码的printf后添加一行:

printf("%d %d", x, y);

你会看到输出1 1,这证明x--和y--确实执行了,只是执行顺序是先取值输出,再修改变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:00:57