我知道通常数组是不可赋值的.然而,我最近发现了这一点

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个成员一样.这里没有浅复制和深复制的区别,因为不需要担心行外指针引用的数据.

C++相关问答推荐

C中的ATONE会扰乱SEN/CLUTE GMS应用程序中的其他字符串

C中空终止符后面的数字?

字符串令牌化xpath表达式

为什么sscanf不能正确地从这个字符串格式中提取所有数字?

LONG_DOUBLE_T是否存在(标准C:C23)

CSAPP微型shell 实验室:卡在sigprocmask

在循环中复制与删除相同条件代码的性能

如何在CANbus RX/TX FIFO起始地址寄存器(ATSAME 51)的特定地址初始化数组?

如何用c语言修改shadow文件hash部分(编程)?

如何在POSIX-UEFI中获得输入?

S在本文中的价值观到底出了什么问题?

编译器如何处理具有更复杂值的枚举?

如果格式字符串的内存与printf的一个参数共享,会发生什么情况?

安全倒计时循环

CS50 pset 5的皱眉脸正确地处理了大多数基本单词,并且拼写判断不区分大小写.

为什么我的半数组测试和奇数组测试不起作用?(我使用Assert进行调试)

一元运算符

当 n 是我们从用户那里获得的整数时,创建 n 个 struct 参数

从管道读取数据时丢失

使用fread()函数读取txt文件