gpt4 book ai didi

c - 指向结构数组的指针数组

转载 作者:太空狗 更新时间:2023-10-29 15:32:13 25 4
gpt4 key购买 nike

我是 C 初学者,我需要帮助。我有一个像下面这样的结构:

    struct {
char* name;
int level;
int spring_prob;
int population;
} Organism;

必须将具有相同级别的生物分组到同一个数组中才能创建这样的情况:

    +++++         +++++++++++++++++++++++++++
| 0 | --> | organism_0 | organism_1 |
+++++ ++++++++++++++++++++++++++++++++++++++++
| 1 | | organism_2 | organism_3 | organism_4 |
+++++ ++++++++++++++++++++++++++++++++++++++++
| 2 | | organism_5 |
+++++ ++++++++++++++
org

main 中,我创建了一个指向结构数组指针的数组:

    int main {
...
Organism *org[];
load_organism(org);
show(org);
return 0;
}
void load_organism (Organism *org[]){
Organism o[3];
o[0].name = "abc";
o[0].level = 0;
o[0].spring_prob = 25;
o[0].population = 300;

o[1].name = "def";
o[1].level = 0;
o[1].spring_prob = 25;
o[1].population = 20;

o[2].name = "ebs";
o[2].level = 0;
o[2].spring_prob = 25;
o[2].population = 20;

*org[0] = o;
}
void show (Organism* org[]) {
print("%s", org[0][0].name);
}

当我尝试打印第一个生物体的名称 时它崩溃了。我希望你能帮我找出错误。提前致谢。

最佳答案

您应该会在该代码中看到许多编译器警告。

例如,当您将 o(它是一个 Organism[])分配给 *org[0] 时,它是一个 有机体。注意这些警告。

在这种情况下,你的意思是:

org[0] = o;

但这最终会失败,因为 o 是一个局部变量,当函数返回时,它的内存将被丢弃。

改为创建它:

Organism *o = malloc(3 * sizeof(Organism));

清理完这些后,您实际上需要为 org 分配一些未初始化的内存。分配给其成员时的坏消息。

要么像这样给数组一个特定的大小:

Organism *org[10];

或如上分配:

Organism **org = malloc(10 * sizeof(Organism *));

Organism **org = calloc(10, sizeof(Organism *));

当程序退出时,确保 free() org 的任何成员,以及 org 本身,如果你去 malloc() 路由。

关于c - 指向结构数组的指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32509071/

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