我是 C 的新手..我正在尝试了解动态内存分配在结构和数组的情况下是如何工作的..所以例如我有这样的代码..
struct Person
{
int id;
char *name;
char *place;
};
struct Database
{
struct Person *data_rows;
};
我想为字符数组 name 和 place.. 以及 struct data_rows 数组动态分配内存.. 将它们的大小作为输入.. 那么理想情况下分配的顺序和正确的语法应该是什么?谢谢。
最佳答案
好吧,“显然”您需要先填写“struct Database”:
struct Database MyDatabase;
MyDatabase.data_rows=malloc(sizeof(MyDatabase.data_rows[0])*NumberOfPeople);
忽略我没有检查 malloc() 是否失败的事实,这将为您提供一个“struct Person”数组,所有这些都未初始化。因此,您很可能想要初始化它们:
int i;
for (i=0; i<NumberOfPeople; i++)
{
struct Person* MyPerson;
MyPerson=&MyDatabase.data_rows[i];
MyPerson->id=i;
MyPerson->name=malloc(...);
/* Do something to store the name in MyPerson->name */
MyPerson->place=malloc(...);
/* Do something to store the place in MyPerson->name */
}
现在,这里的问题是我放在 malloc 上的“...”。如果您使用固定大小,这很容易,但是您可以将您的结构声明为类似
struct Person
{
int id;
char name[100];
char place[200];
};
基本上,我只是不知道名称的长度应该是多少,因此我只是将其键入“...”。
此外,我只是猜测“id”可能是什么。使用数组索引实际上有点毫无意义:-)
当然,您不必现在全部完成。您可以只将名称和指针设置为 NULL 并在以后填充它们,例如当您从文件中读取数据时,或者您打算做的任何事情。或者,如果您确信您的代码始终“知道”哪些字段已初始化,哪些字段未初始化,则您可以根本不在此处对其进行初始化。
关于c - 结构中数组和结构数组的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11382890/