c语言申请二维数组到堆空间
时间: 2023-11-07 10:22:08 浏览: 111
申请二维数组到堆空间可以使用动态内存分配函数`malloc`,具体步骤如下:
1. 使用`malloc`动态申请一维数组的空间,数组长度为行数乘以每行元素个数,即`rows * cols`。
2. 使用指针数组存储每行的起始地址,即申请`rows`个指针大小的空间,返回的指针数组即为二维数组。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows = 3, cols = 4;
int **arr = (int **)malloc(rows * sizeof(int *));
if (arr == NULL) {
printf("Memory allocation failed.\n");
return -1;
}
int i, j;
for (i = 0; i < rows; i++) {
arr[i] = (int *)malloc(cols * sizeof(int));
if (arr[i] == NULL) {
printf("Memory allocation failed.\n");
return -1;
}
}
// 初始化二维数组
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
arr[i][j] = i * cols + j;
}
}
// 打印二维数组
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
// 释放二维数组空间
for (i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
return 0;
}
```
上面的代码中,首先使用`malloc`申请了一个指针数组`arr`,长度为`rows`,每个元素的类型为`int *`,即指向整型数组的指针。然后使用两层循环分别申请每行的空间,并将每行的起始地址存储到指针数组中。最后释放二维数组空间时,需要先释放每行的空间,再释放指针数组的空间。
阅读全文
相关推荐















