左值:数组和结构
Posted
技术标签:
【中文标题】左值:数组和结构【英文标题】:lvalue : array and structure [duplicate] 【发布时间】:2016-05-17 14:40:20 【问题描述】:lvalue
定义为可以为其赋值的表达式。
并且用数组值赋值和数组是非法的。例如:
int x[2],y[2];
x = y;
而结构可以被视为lvalue
s。下面的结构赋值是有效的。
typedef struct car
char color[20];
int price;
CAR;
CAR audi, bmw;
audi = bmw;
有什么区别?
【问题讨论】:
什么意思有什么区别?你已经说过了。 如果你愿意,问题不在于 LHS,它可能确实是我们所关心的左值,而是 RHS。赋值的操作数需要进行左值转换,这对数组是不可用的。 如果它询问为什么您可以在结构中分配数组,而不是独立的,则可以挽救这个问题。我试图回答这个问题。 @SergeyA 是的,我认为这是个好问题,但问得不好。 另外,audi
的 color
字段实际上会发生什么?数组被复制了吗?
【参考方案1】:
数组本身不能赋值,但可以在struct
s 内部赋值,这是有历史原因的。这种差异确实没有技术原因。
传闻是,当 C 被设计时,它是基于某种没有数组分配的语言(不记得是哪一种!),所以这个特性也被排除在 C 之外——以保持兼容性。但是,这种语言没有struct
s,所以struct
s 中的数组赋值是可以的。
【讨论】:
以上是关于左值:数组和结构的主要内容,如果未能解决你的问题,请参考以下文章