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
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
對於第一個問題
您不能直接寫入到一個數組,你可以只寫的各個細胞的陣列。 您可以使用for循環來初始化數組b或memcpy(& b,& a,sizeof b);
使用結構編譯器爲您執行memcpy。
糾正我,如果我錯了。
當您鍵入:b=a
時,編譯器期望您將數組分配給b,但a
只是指向存儲數組的第一個元素的位置的指針,因此存在類型不匹配。這就是爲什麼printf("%d",*a);
將打印1
。 至於爲什麼可以分配結構,這是因爲在上例中的b1
和b2
基本上是數據類型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
。這證明在這個例子中b
和c
不指向相同的memory.hope這有助於。
這就是語言的定義。如果您希望能夠通過賦值來複制數組,請將其設置爲結構的成員。 –