[英]C struct malloc & array of pointers implementation
几天前我才刚开始用C编程。 我现在正在尝试学习结构。
我有这个程序, 我想对其进行改进,以使我的数组人现在是指向结构的指针数组。 我不确定该怎么做。
我还想修改我的insert方法,以调用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
,您必须记住要通过为每个位置i
调用free(people[i])
来free(people[i])
分配的每个内存位置。
我注意到您声明了该数组可容纳12个结构。 当有人更改代码时,这可能很危险:当HOW_MANY
大于12时,它将不起作用。您应该声明一个相同大小的数组:
struct person *people[HOW_MANY];
这样可以确保您的阵列始终具有恰好需要的空间。
更新:您需要声明insert
为接收指针数组而不是结构数组:
静态无效插入(struct person * people [],char * name,int age){...}
people[i].name
无效。 由于people[i]
现在是一个指针,因此您需要这样做:
people[i]->name
或者,等价地, (*people[i]).name
。
同样适用于people[i]->age
。 记住要同时在main()
和内部insert
进行更改。
另外,除非有充分的理由,否则请考虑将i
insert
而不是使用static
变量。 静态变量用于具有内部状态的函数,对我而言, insert
并不是您想要的那种函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.