用malloc动态创建二维数组
时间: 2023-12-26 14:28:06 浏览: 54
以下是两种使用malloc动态创建二维数组的方法:
方法一:利用二级指针申请二维数组
```c
#include <stdio.h>
#include <stdlib.h>
int main(){
int N, M, i, j;
scanf("%d %d", &N, &M);
// malloc二维数组
int **a = (int **)malloc(sizeof(int *) * N);
for(i = 0; i < N; i++){
a[i] = (int *)malloc(sizeof(int) * M);
}
// 释放内存
for(i = 0; i < N; i++){
free(a[i]);
}
free(a);
return 0;
}
```
方法二:利用数组指针(行指针)申请二维数组
```c
#include <stdio.h>
#include <stdlib.h>
int main(){
int i, j;
// 申请一个3行2列的二维数组
int (*a)[2] = (int (*)[2])malloc(sizeof(int) * 3 * 2);
// 释放内存
free(a);
return 0;
}
```
相关问题
用malloc创建二维数组
要使用malloc创建二维数组,您需要先确定数组的行数和列数,然后使用malloc分配内存。下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows, cols;
printf("Enter the number of rows: ");
scanf("%d", &rows);
printf("Enter the number of columns: ");
scanf("%d", &cols);
// 动态分配内存
int **arr = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
arr[i] = (int *)malloc(cols * sizeof(int));
}
// 使用数组
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
arr[i][j] = i + j;
}
}
// 打印数组
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
// 释放内存
for (int i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
return 0;
}
```
在这个示例中,我们首先从用户获取行数和列数,然后使用malloc分别为行和每一行中的列分配内存。然后,我们对数组进行填充和打印操作,最后释放分配的内存。请注意,在使用完二维数组后,一定要释放动态分配的内存以避免内存泄漏。
c语言动态创建二维数组
动态创建二维数组的方法如下:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows, cols, i, j;
int **arr;
printf("Enter number of rows: ");
scanf("%d", &rows);
printf("Enter number of columns: ");
scanf("%d", &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 * j;
}
}
//打印数组
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
printf("%d\t", arr[i][j]);
}
printf("\n");
}
//释放内存
for (i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
return 0;
}
```
首先,通过`scanf`函数读入数组的行和列数。然后,使用`malloc`函数动态分配内存。在这里,我们首先分配一个指向指针的指针`arr`,大小为`rows`个指针。然后,我们为每一行分配`cols`个整数的内存。这样,我们就创建了一个`rows`行、`cols`列的二维数组。
接下来,我们通过两个嵌套的循环为数组赋值。最后,我们再次使用两个嵌套的循环打印数组。最后,我们使用`free`函数释放内存。
注意,动态分配的内存必须手动释放,否则可能会导致内存泄漏。
相关推荐
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)