C struct malloc & array of pointer 实现



我几天前刚开始用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不是你想要的函数类型。

相关内容

最新更新