c语言 error c2106: "=": 左操作数必须为左值,条件运算符中的“错误:左值作为赋值的左操作数”...

我是C的新手,今天我学到了“?”运算符,它是if-else语句的简短类型.但是,当我执行此代码时:int b;

int x;

b=3<2?x=12:x=34;

我收到错误“错误:左值作为赋值的左操作数需要左值”.我不明白为什么会这样.我想到的过程是程序首先将34分配给x,然后将x的值(即34)分配给b.

另一方面,我可以使用该语句作为int b;

int x;

b=3<2?x=12:(x=34);

没有任何错误.我查看了我的书,但没有任何帮助.为什么我不能使用第一个语句?我的电脑试图做什么?

谢谢…

最佳答案 1有趣的问题 – 它突出了C和C之间的两个区别.

(1)三元表达式的评估规则在C和C中是不同的

C解析如下logical-OR-expression ? expression : assignment-expression

因此,它通过将赋值表达式与x = 34匹配来解析语句b = 3<2 ? x = 12 : (x = 34);

但是C这样解析logical-OR-expression ? expression : conditional-expression

x = 34不是条件表达式,因此您的语句将被解析为b = (3<2 ? x = 12 : x) = 34;

(2)C中的条件运算符可以返回左值,而C则不能.因此,以下在C中是合法的但在C中不合法:b = (3<2 ? x = 12 : x) = 34;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值