我正在尝试通过使用像这样的结构来制作简单的数据库
struct Employee{
char* name;
int ID;
int GPA;
int salary;
};
我知道如何使用它在堆中分配一个结构类型的指针
struct Employee* emp=malloc(sizeof(Employee));
我现在的问题是我不太擅长分配进程,我想要 在堆中分配 N 个结构指针,我不能使用数组,因为直到运行时才知道大小 有什么建议 ?
最佳答案
是的,您需要动态分配内存,即为每个新的 struct Employee
分配一个新的堆 block 。
例如,您可以在大小更改时使用 realloc
执行此操作:
yourArrayPtr=realloc(yourArrayPtr,newsize * sizeof(struct Employee));
realloc
函数主要是为其返回值指向的数据分配新的内存量。这是扩展或收缩动态分配数组的便捷方式。 newsize
这里是数组元素的新数量,它乘以一个 Employee 结构的大小,呈现新数组所需的空间总量。 realloc
的返回值被分配给你的数组指针,因此它专门指向这个新分配的空间。在这种情况下,它可以像这样使用:
struct Employee* emp= NULL;
然后在您需要时:
int n = 8;
emp = realloc (emp, n * sizeof(struct Employee));
请记住,您仍然需要释放
此内存。
您现在可以初始化和访问此数据:
emp[3] = {value1, value2, value3, ...};
就结构而言,您还可以想到另一种数据结构 - 链表,其中每个结构都包含指向其后继者的指针。您可以在这里阅读:http://www.cprogramming.com/tutorial/c/lesson15.html
在你的情况下,它会是这样的:
struct Employee{
char* data;
struct Employee* next;
};
关于c - 在堆内存数组中分配指向结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28527594/