C 左值:数组和结构

C 左值:数组和结构,c,arrays,structure,lvalue,C,Arrays,Structure,Lvalue,左值被定义为可以赋值的表达式。 使用数组值分配和数组是非法的。例如: int x[2],y[2]; x = y; 然而,结构可以被视为lvalues。以下结构分配有效 typedef struct car { char color[20]; int price; } CAR; CAR audi, bmw; audi = bmw; 区别是什么?数组本身不可分配,但在结构内部可分配,这有其历史原因。这种差异确实没有技术上的原因 这里的轶事是,当C被设计时,它是基于一种没有数组分

左值
被定义为可以赋值的表达式。 使用数组值分配和数组是非法的。例如:

int x[2],y[2];
x = y;
然而,结构可以被视为
lvalue
s。以下结构分配有效

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

CAR audi, bmw;
audi = bmw;

区别是什么?

数组本身不可分配,但在结构内部可分配,这有其历史原因。这种差异确实没有技术上的原因


这里的轶事是,当C被设计时,它是基于一种没有数组分配的特定语言(不记得是哪种语言!),所以这个特性也被排除在C之外,以保持兼容性。但是,这种语言没有
struct
s,因此
struct
s中的数组分配是可以的。

你的意思是什么?你已经说过了。如果你愿意的话,问题不在于LHS,它可能确实是我们关心的左值,而在于RHS。赋值的操作数需要进行左值转换,这对于数组是不可用的。如果它询问为什么可以在结构中赋值,而不是在独立结构中赋值,这个问题可以解决。我试图回答这个问题。@SergeyA是的,我认为这是一个好问题,但问得不好。另外,
奥迪
颜色
字段会发生什么变化?数组是否已复制?