替代C中的嵌套结构

时间:2013-04-03 02:27:15

标签: c struct

当我想跟踪内部结构中有多少项时,我倾向于使用嵌套结构。所以我通常会做以下事情:

typedef struct Product {
    char *name;
    int qty;
} Prods;

typedef struct Category {
    char *name;
    int qty;
    int prods_count;
    Prods *prod;
} Cats;

然后我可以访问/释放数据:

Cats *cat = malloc(sizeof(Cats));
cat->prods_count = 10;
cat->prod = malloc(cat->prods_count, sizeof(Prods));
cat->prod[0].name = malloc(15);
strcpy(cat->prod[0].name, "Hello World!!!");
cat->prod[0].qty = 100;
for (i=0; i<cat->prods_count; i++)
    free(cat->prod[i].name);
...

我想知道是否有办法只使用一个struct

3 个答案:

答案 0 :(得分:2)

你可以为数字保存一个数组,为数字保存一个数组,但这会非常麻烦,因为它会消除在他们自己的结构中有它们的逻辑关系。

嵌套结构(以及它们在面向对象语言中的对象)非常自然,你应该习惯它。

答案 1 :(得分:0)

你可以这样做

typedef struct Category {
    char *name;
    int qty;
    int prods_count;
    Prods *prod;
    int * qty;
    char ** name;
} Cats;

但是你现在必须两次而不是一次。

答案 2 :(得分:0)

您当前的设置是构建它的好方法。它被称为Aggregation