2013-08-18 54 views
0

C中的數組和結構將數據存儲在連續的內存中。那麼爲什麼C不允許直接複製使用「=」的數組,因爲它允許用於結構。 例子:在C中以C v/s複製結構複製數組C

int a[3] = {1,2,3}; 
int b[3]; 
b = a; // why is this not allowed. 

struct book b1, b2; 
b1.page = 100; 
b1.price = 10.0; 

b2 = b1; // Why is this allowed 
+0

這就是語言的定義。如果您希望能夠通過賦值來複制數組,請將其設置爲結構的成員。 –

回答

0

對於第一個問題

您不能直接寫入到一個數組,你可以只寫的各個細胞的陣列。 您可以使用for循環來初始化數組b或memcpy(& b,& a,sizeof b);

使用結構編譯器爲您執行memcpy。

糾正我,如果我錯了。

0

當您鍵入:b=a時,編譯器期望您將數組分配給b,但a只是指向存儲數組的第一個元素的位置的指針,因此存在類型不匹配。這就是爲什麼printf("%d",*a);將打印1。 至於爲什麼可以分配結構,這是因爲在上例中的b1b2基本上是數據類型book的變量,並且可以分配變量。當分配變量時,內容被複制並且它們不引用相同內存location.This例子或許可以解釋我的意思更明確:

#include<stdio.h> 

typedef struct{int a;}num; 
int main() 
{ 
    num b,c; 
    b.a = 10; 
    c=b; 
    b.a =11; 
    printf("%d\n",(c.a)); 
    return 0; 
} 

輸出是10。這證明在這個例子中bc不指向相同的memory.hope這有助於。