帮我优化一下int *func(int u,int o){ int (*arr)[o]=(int(*)[o]) malloc(u*sizeof (int[o])); return *arr; } int main(){ int n,m; scanf("%d%d",&n,&m); int *brr = func(n,m); printf("%d",brr); }使其可以手动输入两个数开辟一个二维数组的功能
时间: 2023-08-28 10:17:18 浏览: 80
可以将函数中的 `malloc` 改为循环开辟一维数组,并将每个一维数组的首地址存入二维数组中,同时在 `main` 函数中添加循环输入二维数组的元素值的代码。修改后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
int **func(int u, int o) {
int **arr = (int **)malloc(u * sizeof(int *));
for (int i = 0; i < u; i++) {
arr[i] = (int *)malloc(o * sizeof(int));
}
return arr;
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
int **brr = func(n, m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%d", &brr[i][j]);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("%d ", brr[i][j]);
}
printf("\n");
}
for (int i = 0; i < n; i++) {
free(brr[i]);
}
free(brr);
return 0;
}
```
这样就可以手动输入两个数并开辟一个二维数组,并通过循环输入和输出二维数组的元素值。注意在程序结束前要释放动态分配的内存,否则会造成内存泄漏。
阅读全文