C 初始化包含指向结构指针的指针的结构
我想初始化一个包含不同类型变量的结构。例如,假设我有C 初始化包含指向结构指针的指针的结构,c,pointers,struct,C,Pointers,Struct,我想初始化一个包含不同类型变量的结构。例如,假设我有 struct population { int *ids; double *incomes; struct good **goodsdistn; // This is the one I am having trouble with. }; struct population popn; 我想使用另一个结构中定义的参数初始化popn,比如 struct params { int numpeople;
struct population {
int *ids;
double *incomes;
struct good **goodsdistn; // This is the one I am having trouble with.
};
struct population popn;
我想使用另一个结构中定义的参数初始化popn
,比如
struct params {
int numpeople;
// there are other parameters here, not relevant for the question.
};
struct params parameters = {.numpeople = 50};
要初始化popn
我考虑执行以下操作:
(1) 在main()之外定义以下函数
(2) 在main()
中调用此函数初始化popn(稍后我可以填充结构成员):
谢谢您的帮助。您想用以下内容代替?
:
malloc(sizeof(struct good *))
正如在评论中提到的,我还认为struct good**
是过分的,但是您知道可以在变量上使用sizeof
void create_population(struct population *popn, struct params *parameters)
{
popn -> ids = malloc(sizeof(popn->ids[0]) * parameters -> numpeople);
popn -> incomes = malloc(sizeof(popn->incomes[0]) * parameters -> numpeople);
popn -> goodsdistn = malloc(sizeof(popn->goodsdistn[0]) * parameters -> numpeople);
}
如果确实要使用类型标识符,则可以使用sizeof(struct good*)
或泛型sizeof(void*)
。所有数据指针在C中的大小都相同。为什么struct good**goodsdistn
而不是struct good*goodsdistn
?@特洛伊木马goodsdistn
将是struct good指针的数组。但我会进一步考虑的。谢谢。但是,当初始化popn
时,ids
、incomers
等数组中没有任何内容时,这是否有效。也就是说,id[0]有意义吗。我将研究是否需要struct good**。@Curious2learn是的,它会起作用。实际上,您并没有取消对指针的引用,只是查询取消引用的类型有多大sizeof
是一个编译器运算符,不是运行时函数。谢谢。这太棒了。我会尝试一下,然后接受答案。再次感谢。
malloc(sizeof(struct good *))
void create_population(struct population *popn, struct params *parameters)
{
popn -> ids = malloc(sizeof(popn->ids[0]) * parameters -> numpeople);
popn -> incomes = malloc(sizeof(popn->incomes[0]) * parameters -> numpeople);
popn -> goodsdistn = malloc(sizeof(popn->goodsdistn[0]) * parameters -> numpeople);
}