【发布时间】:2020-08-01 18:24:36
【问题描述】:
Short:如何将二维数组作为函数参数传递,并将结果存储在参数地址中?
更长:我有代码(如下),它从main() 调用一个初始化函数,然后打印内容。但是,我希望将malloc 给出的指针存储到变量A 中后,结果将保存在参数中,但事实并非如此。当用一维数组做类似的事情时,它可以顺利运行,但不适用于二维数组。
为简单起见,在本例中,我将其设为 3x3,但我希望拥有不固定数量的 GB 数据。然后,我必须使用malloc,并且无法在编译时声明矩阵大小。
#include <stdio.h>
#include <stdlib.h>
void print_matrix(int n, double **A) {
int i, j;
for(i=0; i<n; i++) {
for(j=0;j<n;j++) {
printf("%0.2f ",A[i][j]);
}
printf("\n");
}
}
void init(int n, double **A) {
int i;
A = (double **)malloc(n * n * sizeof(double *));
for(i=0; i<n; i++) {
A[i] = (double *)malloc(n * sizeof(double));
}
A[0][0] = 9.0;
A[0][1] = 6.0;
A[0][2] = -3.0;
A[1][0] = 6.0;
A[1][1] = 13.0;
A[1][2] = -5.0;
A[2][0] = -3.0;
A[2][1] = -5.0;
A[2][2] = 18.0;
print_matrix(n, A);
}
int main() {
int i;
int n=3;
double **A;
init(n, A);
print_matrix(n, A);
for(i=0; i<n; i++)
free(A[i]);
free(A);
return 0;
}
编译后,我可以在init() 函数内打印矩阵的内容,但不能从main() 打印而不会出现分段错误,这当然意味着A 指向未分配的内存,甚至A[0][0] 也不是指向矩阵的根。我正在使用 GCC 和标准 C99。
$ gcc --version
gcc (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008
$ gcc main.c -o main -std=c99
$ ./main
9.00 6.00 -3.00
6.00 13.00 -5.00
-3.00 -5.00 18.00
Segmentation fault (core dumped)
关于传递二维数组还有其他有用的问题,但它们并没有解决我的观点,因为它们没有解决在参数中返回结果的问题。
- C — passing a 2d array as a function argument?
- how to define a 2d array using malloc and pass it to a function 来自
编辑:这是一个简单的例子,但我需要传递几个矩阵作为函数参数。因此,我不能简单地返回矩阵A的地址,因为我需要保存几个矩阵的地址。
【问题讨论】:
-
在 C 函数中,参数是按值传递的。
main中的A未初始化。 -
这能回答你的问题吗? Update (int) variable in C inside a function
-
@KamilCuk 谢谢,但这不是我需要的。
-
这就是你需要的。
标签: c arrays gcc multidimensional-array malloc