x += x -= x - x
因为这个表达式尝试在相邻的两个顺序点之间两次改变变量x的值,这个时候编译器的求值顺序是任意的,赋值号左右两边的x的值编译器自己做主,它想选减之前的就选减之前的,想用加之后的就用加之后的!!!楼主,去参考一下C语言里面顺序点的定义以及几种顺序点的作用。这样的表达式不同的编译器可能会给出不同的值。C语言里面规定不能在两个相邻的顺序点之间两次改变同一个变量的值。
最后x==1。但表达式x+=x-=x++的值却是0。过程:x=x-xx=x+x至此表达式运算完毕,显然x==0;最后算x++使x由0变为1。下面代码可以验证:
#include "stdio.h"int main(int argv,char *argc[]){
int x=6
printf("%d\n",x+=x-=x++)
printf("%d\n",x)
return 0
}
结果:
x=4+=在执行语句的过程中并不会赋值,所以在执行的过程中调用到的x所储存的值都是4.
x+=(x-=(x-(x--)))=
x+=(x-=(x-3))=
4+=(4-=1)=
4+3=7
唔,本地g++运行结果是7.
不知道怎么回事。