如何编写内存图?

时间:2015-12-18 04:09:59

标签: c arrays pointers struct dynamic-memory-allocation

我被要求编码这个记忆图:

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

但我不确定如何更改内存图中的[0]节目,其名称为" pie",价格为9.50,stock_count为7。

如果可能的话,有人可以在内存图中写下如果

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

被执行了?

2 个答案:

答案 0 :(得分:3)

如果我正确理解了您的要求,那么您就是正确的,并且根据我的理解,如果您只需要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

答案 1 :(得分:0)

您可以参考产品/库存中的字段:

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

或者您可以临时参考该部分:

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

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

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