当我想跟踪内部结构中有多少项时,我倾向于使用嵌套结构。所以我通常会做以下事情:
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
?
答案 0 :(得分:2)
你可以为数字保存一个数组,为数字保存一个数组,但这会非常麻烦,因为它会消除在他们自己的结构中有它们的逻辑关系。
嵌套结构(以及它们在面向对象语言中的对象)非常自然,你应该习惯它。
答案 1 :(得分:0)
你可以这样做
typedef struct Category {
char *name;
int qty;
int prods_count;
Prods *prod;
int * qty;
char ** name;
} Cats;
但是你现在必须两次而不是一次。
答案 2 :(得分:0)
您当前的设置是构建它的好方法。它被称为Aggregation。