0

我想初始化一个包含不同类型变量的结构。例如,假设我有

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

void create_population(struct population *popn, struct params *parameters)
{
    popn -> ids = malloc(sizeof(int) * parameters -> numpeople); //This works
    popn -> incomes = malloc(sizeof(double) * parameters -> numpeople); //This works
    popn -> goodsdistn = malloc(sizeof(???) * parameters -> numpeople);
    // What do I put in place of ??? when I have a pointer to a pointer to struct good.

}

(2)在main()调用这个函数初始化popn(稍后我可以填充结构成员):

create_population(&popn, &parameters);

谢谢你的帮助。

4

2 回答 2

1

正如评论中提到的,我也认为 astruct 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 中具有相同的大小。

于 2013-09-05T12:50:59.813 回答
0

您想要以下内容代替???

malloc(sizeof(struct good *))
于 2013-09-05T12:48:30.290 回答