我几天前刚开始用C编程。我现在正在尝试学习结构。
我有这个程序,我想改进它,以便我的数组人员现在是指向结构的指针数组。我不知道该怎么做。
我还想修改我的插入方法,调用 malloc 创建一个新结构并设置指向它的正确数组元素。
据我所知,malloc 是动态内存分配,但尽管我已经阅读了一些指南,但我仍然不确定如何使用它。另外,在使用malloc之后,我还需要在程序中更改什么才能使其像以前一样工作?
如果你想people
是一个指针数组,你必须像这样声明它:
struct person *people[12];
请记住,声明遵循使用,并且取消引用的优先级低于数组索引;这意味着*people[i]
的类型是 struct person
,因此,people[i]
是指向 struct person
的指针。
要初始化 people
中的每个位置,您可以调用 malloc()
以使指针指向一个足够大的有效内存位置以容纳struct person
。它就像:
people[i] = malloc(sizeof(struct person));
当您不再需要people
时,您必须记住通过为每个位置调用free(people[i])
来释放您分配的每个内存位置i
。
我注意到您声明数组可容纳 12 个结构。当有人更改代码时,这可能很危险:当HOW_MANY
大于 12 时,它将不起作用。您应该声明一个相同大小的数组:
struct person *people[HOW_MANY];
这可确保阵列始终具有所需的空间。
更新:您需要将insert
声明为接收指针数组而不是结构数组:
静态空白插入(结构人*人[],字符*名称,整数年龄){ ... }
people[i].name
是无效的。由于people[i]
现在是一个指针,你需要这样做:
people[i]->name
或者,等效地,(*people[i]).name
.
这同样适用于people[i]->age
。请记住在main()
和内部insert
中更改此设置。
此外,请考虑将i
传递给insert
而不是使用static
变量,除非您有很好的理由这样做。静态变量用于具有内部状态的函数,对我来说,insert
不是你想要的函数类型。