左操作数必须为左值另一种看法

解释

//我出现问题的格式为a<b? b :a = b;这种,此时c语言会提示

 lvalue required as left operand of assignment,也就是,左操作数必须为左值。

左操作数 称为“ 左值 ”, 必须 放在内存中可以访问且可以合法修改值的存储单元中,通常只能是变量名;右 操作数 称为“右值”,可以是常量、变量或者表达式,但一定能取得确定的值。

        证明

        在惯性思想里 a = b是一个整体。因此左操作数为a,没有问题。但是事实上a<b? b :a才是一个整体。因此这串代码实际上是  (a<b? b :a) = b;由于(a<b? b :a)结果是一个返回值,是一个值是右操作数,而把b赋值给一个值,而非一个变量显然就是错误的。

        a>b? a=b : a;

        这串代码显然就可以很好地验证并非是三目运算符的每一部分都是值,其中的变量仍然是变量,在将=放在中间时,由于没有其他可能,=仍发挥了正常的功能。

        a=a<b?a : b;

        这是三目运算符接收返回值的一种形式。

解决:本质是优先级问题,用优先级的解决方法

           可以像 a>b? a=b : a;把=移到中间解决

           也可以 a<b? b :(a = b);将赋值优先级拉满

如何理解左操作数必须为左值_赋值的左操作数需要左值是什么意思__Hebrew的博客-CSDN博客   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值