左值:数组和结构

Posted

技术标签:

【中文标题】左值:数组和结构【英文标题】:lvalue : array and structure [duplicate] 【发布时间】:2016-05-17 14:40:20 【问题描述】:

lvalue 定义为可以为其赋值的表达式。 并且用数组值赋值和数组是非法的。例如:

int x[2],y[2];
x = y;

而结构可以被视为lvalues。下面的结构赋值是有效的。

typedef struct car 
    char color[20];
    int price;
 CAR;

CAR audi, bmw;
audi = bmw;

有什么区别?

【问题讨论】:

什么意思有什么区别?你已经说过了。 如果你愿意,问题不在于 LHS,它可能确实是我们所关心的左值,而是 RHS。赋值的操作数需要进行左值转换,这对数组是不可用的。 如果它询问为什么您可以在结构中分配数组,而不是独立的,则可以挽救这个问题。我试图回答这个问题。 @SergeyA 是的,我认为这是个好问题,但问得不好。 另外,audicolor 字段实际上会发生什么?数组被复制了吗? 【参考方案1】:

数组本身不能赋值,但可以在structs 内部赋值,这是有历史原因的。这种差异确实没有技术原因。

传闻是,当 C 被设计时,它是基于某种没有数组分配的语言(不记得是哪一种!),所以这个特性也被排除在 C 之外——以保持兼容性。但是,这种语言没有structs,所以structs 中的数组赋值是可以的。

【讨论】:

以上是关于左值:数组和结构的主要内容,如果未能解决你的问题,请参考以下文章

表达式必须是可修改的左值(字符数组)

函数类型的左值是不是是可修改的左值?

error C2106: “=”: 左操作数必须为左值

将许多结构添加到数据结构(需要作为一元“&”操作数的左值)

在带有模板的结构中,为啥左值会推导出为右值?

C++的结构体指针中出错:表达式必须是可修改的左值_最后发现解决方法很简单