举个例子:

typedef struct {
    int x;
    int y;
    ...
} ReallyBigItem;

ReallyBigItem* array = (ReallyBigItem*) malloc(sizeof(ReallyBigItem) * 8);

ReallyBigItem* item = (ReallyBigItem*) malloc(sizeof(ReallyBigItem));
item->x = 0;
item->y = 1;

array[0] = *item;

ReallyBigItem* array = (ReallyBigItem*) malloc(sizeof(ReallyBigItem) * 8);
我正在为适合8ReallyBigItem结构的数组分配空间。
ReallyBigItem* item = (ReallyBigItem*) malloc(sizeof(ReallyBigItem));
我正在为ReallyBigItem分配空间,并将其内存地址存储在item中。
array[0] = *item;
现在我将数组的第一个元素设置为该项。
我的问题是:
=运算符是否实际在已分配的内存上复制?因此,项结构在内存中存在两次?

最佳答案

因此,项结构在内存中存在两次?
struct点的内容在所指派的任务之后存在两次,是的。
说明:
此表达式的两个操作数

array[0] = *item;

计算为aitem
struct是为=定义的。
因此,上面的表达式将数据(内存的内容,而不是单词中的“内存”)从右边的struts复制到左边。
如果考虑到struct实际上与*item相同,这可能更为明显,因此上述表达式相当于:
array[0] = item[0];

10-06 09:54