动态开辟结构体二维数组
时间: 2023-07-21 21:36:21 浏览: 97
动态开辟结构体二维数组可以使用指向指针数组的指针。具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
struct Student {
char name[20];
int score;
};
int main() {
int n = 3, m = 4;
struct Student **stu;
int i, j;
// 分配行指针数组
stu = (struct Student **)malloc(n * sizeof(struct Student *));
if (stu == NULL) {
printf("Memory allocation failed.\n");
exit(-1);
}
// 分配每行的结构体数组
for (i = 0; i < n; i++) {
stu[i] = (struct Student *)malloc(m * sizeof(struct Student));
if (stu[i] == NULL) {
printf("Memory allocation failed.\n");
exit(-1);
}
}
// 初始化结构体数组
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
sprintf(stu[i][j].name, "Student%d", i * m + j);
stu[i][j].score = rand() % 101;
}
}
// 输出结构体数组
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
printf("%s: %d\t", stu[i][j].name, stu[i][j].score);
}
printf("\n");
}
// 释放内存
for (i = 0; i < n; i++) {
free(stu[i]);
}
free(stu);
return 0;
}
```
这里定义了一个名为`Student`的结构体,包含了学生姓名和成绩两个成员。然后使用指向指针数组的指针`stu`来动态开辟二维数组,其中`n`表示行数,`m`表示列数。首先分配行指针数组,然后为每行分配一个结构体数组。最后初始化结构体数组并输出。最后需要释放内存。
阅读全文