gpt4 book ai didi

c - 初始化一个包含指向结构体指针的结构体

转载 作者:行者123 更新时间:2023-11-30 15:46:04 25 4
gpt4 key购买 nike

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

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

感谢您的帮助。

最佳答案

正如评论中提到的,我也相信 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 中所有数据指针的大小都相同。

关于c - 初始化一个包含指向结构体指针的结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18636602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com