考虑这个例子:
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;
现在我将数组的第一个元素设置为该项目。
我的问题是:
=
运算符实际复制是否已经分配了内存?因此,项目结构存在于内存中两次?
答案 0 :(得分:1)
是的,您正在复制整个struct
。您可以创建ReallyBigItem **array
,只需指定item
(而非*item
)即可复制指针。
答案 1 :(得分:1)
那么item struct在内存中存在两次?
struct
item
的内容,array[0] = *item;
指向相关作业后两次存在,是的。
说明:
此表达式的两个操作数
struct
评估为=
。
struts
定义了struct
。
因此,上面的表达式将数据(内存的内容,而不是“内存”)从右侧*item
复制到左侧。
如果考虑item[0]
实际上与array[0] = item[0];
相同,这可能会更明显,因此上述表达式相当于:
JavascriptExecutor je = (JavascriptExecutor) ieDriver;
String script = "document.getElementsById('form_base_amount_input_hidden')[0].setAttribute('value', '383.852');");
je.executeScript(script);
答案 2 :(得分:0)
是的,确实如此。您复制整个结构。
的证据代码:
#include <stdio.h>
typedef struct {
int x;
int y;
} ReallyBigItem;
int main(void) {
ReallyBigItem* array = (ReallyBigItem*) malloc(sizeof(ReallyBigItem) * 8);
ReallyBigItem* item = (ReallyBigItem*) malloc(sizeof(ReallyBigItem));
item->x = 0;
item->y = 1;
array[0] = *item;
printf("%d - %d\n", array[0].y, item->y);
}