本题正确答案是A
A错误原因是C语言的赋值必须是左值的,也就是左边必须是变量,不能是表达式 因为A选项(b=4)是表达式,不能出现在赋值号左边
A选项
B选项
C选项
D选项
通过实践我们得知
选项A是错误的,所以这道题选A。
解析:
= : left operand must be l-value 到底是什么错误?
解释:赋值号(‘=’)左边的操作数必须是一个左值。通俗的说:左值就是可以改变的值的变量。
发生这个错误的原因是你把常量(或不可改变值的变量)放到了赋值号的左边。
例如:int a[3];
a++;//这里就相当于a=a+1;注意a是数组a[3]的首地址,在声明a[3]后,将开辟一段连续内存空间。
//就是这段连续内存空间的首地址,是一个常量。所以这里将常量放到了赋值号的左边是错误。
//类似的,你在C语言中是不可以写2++;的。
例如:const int num=5;
int b=3;
num=b+4;//这里num为不可改变的值,不能放到赋值号的左边。
总结:赋值号左边的值只能是左值。而上面两个例子中的a,num都不是左值,所以在编译时会出错。
题目中
首先考虑的是小括号的运算等级最高(当前) 将4赋给b此时
小括号中的表达式的值 为常数 4
那么根据C语言的要求
常量不能在等号的左边 。
在这,因为左值问题所以出错。
正确答案是A
B,C,D都是正常的表达式;
A是错误的表达式;
a = (b=4)=3;相当于a=4=3;这是非法表达式。
查阅C语言规范,可以知道赋值符号结合顺序是从右往左;A选项括号内先执行,会变成a=4=3,常量不能赋值!所以A错
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632