C struct malloc&指针数组的实现

时间:2013-10-24 17:07:47

标签: c arrays pointers struct malloc

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

我有这个程序和我想改进它,以便我的数组人员现在是一个指向结构的指针数组。我不知道如何做到这一点。

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

据我所知,malloc是dinamic内存分配但是虽然我已经阅读了一些指南,但我仍然不确定如何使用它。此外,在使用malloc之后,我还需要在程序中更改其他工作方式吗?

1 个答案:

答案 0 :(得分:1)

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

struct person *people[12];

请记住,声明遵循use,并且取消引用的优先级低于数组索引;这意味着*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()insert内进行更改。

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