理解C语言的复制表达式

 

本题正确答案是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