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);

}