几天前我刚开始用 C 编程。我现在正在尝试学习结构。
我有这个程序,我想改进它,以便我的数组 people 现在是一个指向结构的指针数组。我不知道该怎么做。
我还想修改我的插入方法,调用 malloc 创建一个新结构并设置指向它的正确数组元素。
据我所知, malloc 是动态内存分配,但虽然我已经阅读了一些指南,但我仍然不确定如何准确地使用它。另外,在使用 malloc 之后,我还需要在程序中进行哪些更改才能使其像以前一样工作?
如果你想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]->age
。main()
请记住在 in和 inside都进行更改insert
。
此外,请考虑传递i
toinsert
而不是使用static
变量,除非您有充分的理由这样做。静态变量用于具有内部状态的函数,对我来说,insert
这并不是你想要的那种函数。