2016-05-17 49 views
-3

lvalue定义为可以赋值的表达式。 用数组赋值和排列是非法的。例如:左值:数组和结构

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

虽然结构可以被视为lvalue s。下面的结构分配是有效的。

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

CAR audi, bmw; 
audi = bmw; 

有什么区别?

+1

你是什么意思是什么区别?你已经说过了。 –

+0

如果你愿意,这个问题并不是LHS的问题,对于我们所关心的所有人来说,这可能确实是一个左翼,但是RHS。赋值的操作数需要经过左值转换,而不适用于数组。 –

+0

这个问题可能会得到挽救,如果它会问**为什么**你可以在结构中分配数组,而不是独立的数组。我试图回答这个问题。 – SergeyA

回答

3

阵列不能分配给自己有历史原因,但可分配在struct s内。这种差异真的没有技术上的原因。

Anecdottal heresay是,C设计的时候,它是基于一定的语言(不记得哪一个!),它不具有阵列assingment,所以这个功能是由C已排除,以及 - 保持兼容性。但是,这种语言没有struct s,所以struct中的排列顺序是OKayed。