繁体   English   中英

C struct malloc和指针数组实现

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM