举个例子:
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);
我正在为适合8
ReallyBigItem
结构的数组分配空间。ReallyBigItem* item = (ReallyBigItem*) malloc(sizeof(ReallyBigItem));
我正在为
ReallyBigItem
分配空间,并将其内存地址存储在item
中。array[0] = *item;
现在我将数组的第一个元素设置为该项。
我的问题是:
=
运算符是否实际在已分配的内存上复制?因此,项结构在内存中存在两次? 最佳答案
因此,项结构在内存中存在两次?
struct
点的内容在所指派的任务之后存在两次,是的。
说明:
此表达式的两个操作数
array[0] = *item;
计算为a
item
。struct
是为=
定义的。因此,上面的表达式将数据(内存的内容,而不是单词中的“内存”)从右边的
struts
复制到左边。如果考虑到
struct
实际上与*item
相同,这可能更为明显,因此上述表达式相当于:array[0] = item[0];