a=(b=4)=3,按照运算符优先级,先运行b=4,再运行b=3,最后运行a=3,所以结果得到a、b都等于3,并没有错。
(a=3*5)=3*4;按照运算符优先级,先运行a=3*5,再运行a=3*4,最后的出a等于12.
两个都没有错啊。
你看有没有可能是中英文输入法导致的符号的问题。
赋值运算符是最典型的右结合性运算。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。
a=(b=4)=3是错误的前提是,你必须先声明b:
int b = 0;
int a=(b=4)=3;
这条语句的执行顺序是:b=4=>b=3=>a=(b=3)后的结果就是a=3, b=3;
同理,(a=3*5)=3*4;括号优先,最后的结果依然是a=12;
我个人觉得,要养成好的编程习惯,就应该少写这种代码,可读性和维护性太差。实话。
这种代码,不同的编译器结果不一样,没必要纠结。
楼主可能会觉得我答非所问,但是这点确实是我所想指出的
devcpp上试了一下是可以的
你这是判等语句还是赋值语句?