新手C语言问题,a=(b=4)=3;为什么是错误的,而(a=3*5)=3*4;是对的

2024年11月29日 16:41
有5个网友回答
网友(1):

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.

两个都没有错啊。

你看有没有可能是中英文输入法导致的符号的问题。

网友(2):

赋值运算符是最典型的右结合性运算。如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;

网友(3):

我个人觉得,要养成好的编程习惯,就应该少写这种代码,可读性和维护性太差。实话。

这种代码,不同的编译器结果不一样,没必要纠结。

楼主可能会觉得我答非所问,但是这点确实是我所想指出的

网友(4):

devcpp上试了一下是可以的

网友(5):

你这是判等语句还是赋值语句?