何时使用指向C中嵌套结构中另一个结构的指针

时间:2012-04-24 01:03:14

标签: c pointers struct

我很困惑,因为我何时应该使用指向另一个结构的指针或包含副本。例如,我应该在广告资源中使用Products *prods;还是Products prods;?以及我如何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;
};

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

补充Kyle的答案,关于是否使用指针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.