钮祜禄迟迟 2023-03-02 16:00 采纳率: 100%
浏览 97
已结题

关于自增自减运算符怎样计算?

请问输出结果为什么是4 5 5?

#include <stdio.h>
int main()
{
    int x,y,z;
    x=y=2;
    z=3;
    z=4;printf("%d\t%d\t%d",z++,++z,--z);
    return 0;
}

img

  • 写回答

4条回答 默认 最新

  • 元气少女缘结神 2023-03-02 16:56
    关注

    总结起来就是这三条原则:

    原则0:printf语句是从右往左计算会改变变量本身的表达式,计算完毕叫做假结束(而后自增的表达式叫做真结束)
    C=--z 即 z=z-1=3 C=z=3
    B=++z 即 z=z+1=4 B=z=4
    A=z++ 即 A=z=4,本来这里是后自增,我们先不操作去看原则1
    
    原则1:后自增运算是要在整条语句结束以后才自加
    此时A,B,C所有表达式都已假/真结束,所以开始运行被搁置的后自增z=z+1=5
    
    原则2:所有后自增运行结束后,再从左往右将变量值代入之前所有假结束的表达式中,但不可对变量进行任何改变
    B=++z 即相当于:z=z+1由原则2知道不可执行这句,所以 B=z=5
    C=--z 即相当于:z=z-1由原则2知道不可执行这句,所以 C=z=5
    
    所以最后打印的是A:4 ,B:5,C:5
    

    谢谢这个问题,也让我复习了这几个原则

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月10日
  • 已采纳回答 3月2日
  • 创建了问题 3月2日

悬赏问题

  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题