【发布时间】:2026-01-15 13:50:02
【问题描述】:
我有 3 个不同大小的数组。简单来说一个是二维的char数组,另外两个是unsigned int数组。
让他们;
char names[numberOfPeople][MAX_NAME_SIZE + 1];
unsigned int ages[numberOfPeople];
unsigned int weights[numberOfPeople];
让人们有共同的名字,所以宏MAX_NAME_SIZE被定义为10作为预处理器。
向用户询问numberOfPeople,用户使用fgets 输入它,然后经过一些程序将其读取到变量中。
有 VLA 是可以的,但是从用户那里获取 numberOfPeople 变量值的函数在数组定义之后。因此,数组在更改之前使用 numberOfPeople 的初始化值定义。
现在,问题是;如何动态分配内存然后初始化数组?我已经阅读了一些关于 calloc 的文档,但是正如您所看到的,数组不是指向数组的指针。所以我找不到使用calloc 的正确语法。返回到void *,我该如何实现呢?
我必须将数组定义为指向数组的指针吗?第一个是char 数组,这有关系吗?
【问题讨论】:
-
为什么不在
numberOfPeople初始化之后声明数组? -
这里不需要内存分配。只需在询问用户并验证输入后声明您的数组即可。
-
那么,没有其他建议了吗?
-
没有其他建议,从C99开始我们允许混合声明和语句,你应该使用它。不仅要解决这个小问题,还要提高代码的总体可读性。
标签: c malloc dynamic-memory-allocation