赋值问题

A)x=y*5=x+z,这个是错的,有人说Y*5是左值,不能被赋值,是等号左边的就是左值吗?还是什么定义,这样的语句a=b=1,对吗?为什么?真的不懂,再次先谢谢各位了!

赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符(=)具有右结合性。因此,x=y*5=x+z可理解为(x=(y*5=x+z))。那程序就先执行y*5=x+z这个式子,但你发现x+z可以赋值给y*5么?显然不行的。y*5是一个表达式,是不能被赋值的。赋值只能给一个纯粹的变量(如a,b,c,)这样的时候是可以的。因此,语句a=b=1是可以的。
但是,应当注意,在定义中(变量初始化时)是不允许连续赋值的,在这种情况下,如 int a=b=1;是不合法的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-02-09
凡是可以“被赋值”的表达式,就叫“左值”
凡是可以“赋值给”左值的,就叫“右值”

y*5 引用了临时对象的表达式,用户不能寻址该对象,也不能改变它的值,所以它是右值,不是左值

而如果是 x=y=x+z (只是举个例子)

这是 y 可被程序寻址,可以改变它的值 所以是左值
相似回答