0

几天前我刚开始用 C 编程。我现在正在尝试学习结构。

我有这个程序,我想改进它,以便我的数组 people 现在是一个指向结构的指针数组。我不知道该怎么做。

我还想修改我的插入方法,调用 malloc 创建一个新结构并设置指向它的正确数组元素。

据我所知, malloc 是动态内存分配,但虽然我已经阅读了一些指南,但我仍然不确定如何准确地使用它。另外,在使用 malloc 之后,我还需要在程序中进行哪些更改才能使其像以前一样工作?

4

1 回答 1

1

如果你想people成为一个指针数组,你必须像这样声明它:

struct person *people[12];

请记住,声明在使用之后,并且取消引用的优先级低于数组索引;这意味着 that*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为接收指针数组而不是结构数组:

static void insert (struct person *people[], char *name, int age) { ... }

并且people[i].name无效。由于people[i]现在是一个指针,因此您需要这样做:

people[i]->name

或者,等价地,(*people[i]).name

这同样适用于people[i]->agemain()请记住在 in和 inside都进行更改insert

此外,请考虑传递itoinsert而不是使用static变量,除非您有充分的理由这样做。静态变量用于具有内部状态的函数,对我来说,insert这并不是你想要的那种函数。

于 2013-10-24T17:14:35.333 回答