1

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

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

4

3 回答 3

2

您可以为 qty 保留一个数组,为 name 保留一个数组,但这会非常麻烦,因为它消除了将它们放在自己的结构中所暗示的逻辑关系。

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

于 2013-04-03T02:32:43.177 回答
0

你可以这样做

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

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

于 2013-04-03T02:30:13.103 回答
0

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

于 2013-04-03T02:33:37.773 回答