请问输出结果为什么是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;
}
请问输出结果为什么是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;
}
总结起来就是这三条原则:
原则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
谢谢这个问题,也让我复习了这几个原则