我很困惑,因为我何时应该使用指向另一个结构的指针或包含副本。例如,我应该在广告资源中使用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;
};
答案 0 :(得分:2)
在编译时未知数组大小时,应使用指针。如果您知道每个Inventory结构将只包含一个Products结构或10或100,那么只需声明Products prods[100]
。但是,如果您在运行时读取任意记录并且无法在编译时知道Inventory结构将包含多少Products记录,则使用Products *prods
。您还需要size
和count
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.