1

我很困惑何时应该使用指向另一个结构的指针或包含副本。例如,我应该使用InventoryProducts *prods;还是Products prods;在 Inventory 中?我该怎么做malloc

typedef struct Products Products;
struct Products
{
    int  id;
    char *cat;
    char *name
};

typedef struct Inventory Inventory;
struct Inventory
{
    char* currency;
    int size;
    Products prods; // or Products *prods;
};
4

2 回答 2

2

补充凯尔的回答,关于是否使用指针的决定Products,您必须考虑以下几点:

如果你不知道你会有多少元素,你的Inventory结构至少应该有:

typedef struct Inventory Inventory;
struct Inventory
{
    char *currency;
    int size, count;
    Products* prods;
    ... // other elements you should need
};

并且指针应定义为(实例化Inventory元素时):

...
Inventory inv;
inv.size = _total_elems_you_will_need_
inv.prods = (Products *)malloc(inv.size * sizeof(Products));
...

另一方面,如果这个数量总是固定的,那么你可以Inventory用这样的东西定义你的结构(而不​​是上面定义的指针):

Products prods;      // if you'll need only one element.
Products prods[10];  // if you'll need only ten.
于 2012-04-24T01:42:41.883 回答
1

当编译时数组的大小未知时,您应该使用指针。如果您知道每个 Inventory 结构将只包含一个 Products 结构或 10 或 100,那么只需声明Products prods[100]. 但是,如果您在运行时读取任意记录并且在编译时无法知道 Inventory 结构将包含多少 Products 记录,则使用Products *prods. 您还需要sizecountstruct 元素来跟踪您已经 malloc'd 或 realloc'd 以及您用 Products 结构填充了多少内存。

于 2012-04-24T01:28:08.317 回答