请问输出结果为什么是4 5 5?
#include
int main()
{
int x,y,z;
x=y=2;
z=3;
z=4;printf("%d\t%d\t%d",z++,++z,--z);
return 0;
}
总结起来就是这三条原则:
原则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
谢谢这个问题,也让我复习了这几个原则
/* 运算部分,从右向左*/
--z // 先运算后赋值,z=3=4-1
++z // 还是先运算后赋值,z=4=3+1
z++ // 先赋值后运算,所以输出z=4,再运算z=5=4+1
// 运算后的值为 z=5
/* 输出部分,从左向右*/
z++ // 运算之前,z=4,所以输出4
++z // 此时i=5,输出当前值 i=5
--z // 此时i=5,输出当前值 i=5
还不理解的话可以参考https://blog.csdn.net/NanamiKento/article/details/122126610
++在前,先加1后运算,++在后,先运算后加1
举个例子来说:
当a=1,那么a++=1,此时运算完成后a=2
而当a=1时 那么++a=2,运算完成后依然是2