2016-05-17 64 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。