如何编码内存图?

How to code memory diagram?

我被要求编写这个内存图:

我也得到了这个结构:

struct product {
    char *name;
    double price;
    int stock_count;
};
typedef struct product PRODUCT;

我不必编写完整的函数,只需编写所需的语句并从堆中编写一个可以存储两个产品的数组,第一个产品如图所示初始化;即关于馅饼的信息。

这是我尝试做的: 项目

PRODUCT item;
item->name = "bread"; //not sure if it's "bread" or &"bread"
item->price = 2.25;
item->stock_count = 45;

对于堆中可以存储的数组 两个产品:

PRODUCT *inventory, *p;
p = malloc(sizeof(PRODUCT)*2);
assert(p!=NULL);
inventory = p; //I've also read that the answer might be p = inventory not sure why though

但我不确定如何更改名称为 "pie",价格为 9.50,stock_count 为 7.

的内存图中显示的 [0]

如果可能的话,有人可以写下内存图,了解如果

会发生什么
PRODUCT *p;
p = &inventory[1];
*p = item;

被执行了?

可以直接参考product/inventory里面的字段:

inventory[0].name = "pie";
...

或者你可以暂时参考那部分:

PRODUCT *p = &inventory[0];
p->name = "pie";
...

如果使用最近的编译器,你还可以做的是在初始化时声明它:(你不能再调整它的大小了)

PRODUCT inventory[2] = {
    { name: "pie", price: ..., stock_count: ... },
};

如果我正确理解了您的要求,那么看来,您的方法是正确的,而且根据我的理解,如果您只需要 1 个 inventory,则不需要 p,反正。您可以像

这样更改您的代码
PRODUCT *inventory = NULL;
inventory  = malloc(sizeof(PRODUCT)*2);
assert(inventory !=NULL);

然后,您可以使用 inventory 访问成员,例如

inventory[0].name = "pie";
inventory[0].price = 9.50;
inventory[0].stock_count = 7;
. . . . 
inventory[1].name 
inventory[1].price

等等