我几天前刚开始用C语言编程 . 我现在正在尝试学习结构 .
我有这个程序和 I want to improve it so that my array people is now an array of pointers to structs. 我不知道该怎么做 .
I also want to modify my insert method, to call malloc to create a new struct and set the correct array element pointing to it.
据我所知,malloc是dinamic内存分配但是虽然我已经阅读了一些指南,但我仍然不确定如何使用它 . 另外,在使用malloc之后,还需要在我的程序中进行哪些更改以使其像以前一样工作?
1 回答
如果你想
people
是一个指针数组,你必须这样声明它:请记住,声明遵循使用,并且解除引用的优先级低于数组索引;这意味着
*people[i]
的类型为struct person
,因此people[i]
是指向struct person
的指针 .要初始化
people
中的每个位置,请调用malloc()
使指针指向足够大的有效内存位置以容纳struct person
. 它很简单:当你不再需要
people
时,你必须记住释放你分配的每个记忆位置,通过为每个位置i
调用free(people[i])
.我注意到你声明了数组包含12个结构 . 当有人更改代码时,这可能很危险:当
HOW_MANY
大于12时,它将无法工作 . 您应该声明一个大小相同的数组:这可确保您的阵列始终具有所需的空间 .
UPDATE: 您需要将
insert
声明为接收指针数组而不是结构数组:并且
people[i].name
无效 . 由于people[i]
现在是一个指针,你需要这样做:或者,等效地,
(*people[i]).name
.这同样适用于
people[i]->age
. 请记住在main()
和insert
内更改此项 .另外,考虑将
i
传递给insert
而不是使用static
变量,除非您有充分的理由这样做 . 静态变量用于具有内部状态的函数,对我来说,insert
并不是您想要的函数类型 .