二重指针如何用malloc分配成一个n行m列的二维数组
时间: 2024-05-10 18:20:40 浏览: 8
可以使用以下代码分配一个n行m列的二维数组:
```c
int **array;
int i;
// 分配n行指针
array = (int **)malloc(n * sizeof(int *));
if (array == NULL) {
printf("Error: out of memory\n");
exit(1);
}
// 分配每一行的m个元素
for (i = 0; i < n; i++) {
array[i] = (int *)malloc(m * sizeof(int));
if (array[i] == NULL) {
printf("Error: out of memory\n");
exit(1);
}
}
```
这段代码首先使用`malloc`分配了一个长度为`n`的指针数组,每个指针指向一行的开头。然后,使用循环分别为每一行分配了长度为`m`的整型数组。这样就得到了一个`n`行`m`列的二维数组。
注意,在使用完二维数组后,需要分别释放每一行的内存和指针数组的内存。释放内存的代码如下:
```c
for (i = 0; i < n; i++) {
free(array[i]);
}
free(array);
```
相关问题
利用二级指针分配动态二维数组输入二维数组
以下是利用二级指针分配动态二维数组并输入二维数组的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows, cols;
printf("请输入二维数组的行数和列数:");
scanf("%d %d", &rows, &cols);
// 动态分配内存
int **array = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
array[i] = (int *)malloc(cols * sizeof(int));
}
// 输入二维数组元素
printf("请输入二维数组的元素:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
scanf("%d", &array[i][j]);
}
}
// 打印二维数组
printf("输入的二维数组为:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", array[i][j]);
}
printf("\n");
}
// 释放内存
for (int i = 0; i < rows; i++) {
free(array[i]);
}
free(array);
return 0;
}
```
c语言实现用malloc方法分配空间建立一个二维数组
可以使用以下代码实现:
```c
int **arr;
int i, j, rows, cols;
// 获取行数和列数
printf("请输入二维数组的行数和列数:\n");
scanf("%d %d", &rows, &cols);
// 分配空间
arr = (int **)malloc(rows * sizeof(int *));
for (i = 0; i < rows; i++) {
arr[i] = (int *)malloc(cols * sizeof(int));
}
// 初始化数组
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);
```
这段代码使用了 malloc 方法分配了一个二维数组,并对其进行了初始化和输出。