动态申请二维结构体数组
时间: 2023-07-21 17:30:46 浏览: 42
动态申请二维结构体数组可以通过以下步骤实现:
1. 定义结构体类型和指向结构体的指针类型,如:
```
typedef struct {
int x;
int y;
} Point;
typedef Point* PointPtr;
```
2. 动态申请指向指针数组的指针,如:
```
int rows = 5; // 二维数组行数
int cols = 10; // 二维数组列数
PointPtr* p = (PointPtr*)malloc(rows * sizeof(PointPtr));
```
这里申请了一个指向指针数组的指针p,p有rows个元素,每个元素指向一个Point类型的结构体。
3. 为每个指针数组元素申请存储空间,如:
```
int i;
for (i = 0; i < rows; i++) {
p[i] = (PointPtr)malloc(cols * sizeof(Point));
}
```
这里为p的每个元素申请了cols个Point类型的结构体,也就是一个二维数组。
4. 可以像访问普通的二维数组一样访问结构体数组,如:
```
p[0][0].x = 1;
p[0][0].y = 2;
```
5. 记得在程序结束时释放内存,如:
```
for (i = 0; i < rows; i++) {
free(p[i]);
}
free(p);
```