我知道通常数组是不可赋值的.然而,我最近发现了这一点
struct S {
int arr[6];
};
这让我可以做这样的事情
struct S a = {1, 2, 3, 4, 5, 6};
struct S b;
b = a; // b.arr is now a deep clone of a.arr?
这似乎很奇怪,因为我本以为这样的赋值会导致一个浅层副本存储在b中,因为只会复制a.arr的第一个元素的地址?
我知道通常数组是不可赋值的.然而,我最近发现了这一点
struct S {
int arr[6];
};
这让我可以做这样的事情
struct S a = {1, 2, 3, 4, 5, 6};
struct S b;
b = a; // b.arr is now a deep clone of a.arr?
这似乎很奇怪,因为我本以为这样的赋值会导致一个浅层副本存储在b中,因为只会复制a.arr的第一个元素的地址?
数组在C中很奇怪,它们与指针不同,但对它们的许多操作都会将它们隐式地decay变成指针,这可能会误导您认为它们是相同的.
该数组以内联方式存储到每个struct S
个实例中.在赋值时,它将被完整复制,就像可能位于 struct 实例中的任何其他int
个成员一样.这里没有浅复制和深复制的区别,因为不需要担心行外指针引用的数据.