【发布时间】:2019-04-06 03:49:32
【问题描述】:
我是 C 的初学者,我在编写一个需要两个矩阵的函数时遇到了一些问题,将它们相加并将结果作为第三个矩阵返回。根本问题是使函数返回一个数组。
我在网上找到了一些关于如何通过返回指向数组第一个元素的指针来返回数组的解决方案,但无法将其应用于我使用二维数组的情况。我知道如何在主函数中添加矩阵,但我需要将程序分解为几个函数。
这是我的代码
float matrix_add(float matrixA[MAX_SIZE][MAX_SIZE], float matrixB[MAX_SIZE][MAX_SIZE], int column, int line)
{
float matrixRes[MAX_SIZE][MAX_SIZE];
for (int i=0; i<column; i++)
{
for (int j=0; j<line; j++)
{
matrixRes[i][j]=matrixA[i][j]+matrixB[i][j];
}
}
return matrixRes;
}
我尝试了我在网上找到的解决方案之一:
float *matrix_add(float matrixA[MAX_SIZE][MAX_SIZE], float matrixB[MAX_SIZE][MAX_SIZE], int column, int line)
{
static float *matrixRes[MAX_SIZE][MAX_SIZE];
for (int i=0; i<column; i++)
{
for (int j=0; j<line; j++)
{
*matrixRes[i][j]=matrixA[i][j]+matrixB[i][j];
}
}
return matrixRes;
但是它有一些问题 - 我不明白它,并且该函数仍然不起作用 - 它返回错误结果并且编译器中有一个警告“从不兼容的指针类型返回”。 另外,我不确定如何调用它(也许这就是我找到的解决方案的问题?)。我想从数组中获取一些特定的值并像这样调用函数
matrix_add(matrixA, matrixB, column, line)[value][value]);
matrixA 和 B 是一些二维数组,column 和 line 是整数变量。这会返回一个错误(下标值既不是数组也不是指针也不是向量)
您能否指出正确的方向并告诉我如何使此功能发挥作用(并解释解决方案)? MAX_SIZE 是预定义值(10),因为在这个分配中我应该使用静态内存分配(但如果你可以通过使用动态分配来帮助我,那很好) 主要功能是这样的
int main()
{
int column_num[2], line_num[2];
float matrixA[MAX_SIZE][MAX_SIZE], matrixB[MAX_SIZE][MAX_SIZE];
scanf("%d", &column_num[0]);
scanf("%d", &line_num[0]);
matrix_load_val(matrixA, column_num[0], line_num[0]);
scanf("%d", &column_num[1]);
scanf("%d", &line_num[1]);
matrix_load_val(matrixB, column_num[1], line_num[1]);
}
for (int i=0; i<column_num[0]; i++)
{
for(int j=0; j<line_num[0]; j++)
{
printf("%0.5g\n", matrix_add(matrixA, matrixB, i, j));
}
}
matrix_load_val 是一个程序,它向用户询问值并将它们放入一个结果矩阵中(它确实有效,经过测试)
【问题讨论】:
-
从 C 中的函数“返回”数组的常用方法是让调用者分配数组并将指向它的指针作为参数传递给函数。然后该函数使用正确的值填充数组。
-
把结果矩阵传给
matrix_add怎么样,比如matrix_add(matrixA, matrixB, matrixResult, column, line)?matrix_add可以填充matrixResult。 -
能否请您显示主要功能或matrixRes被复制的功能?
-
我添加了main函数
-
@FiddlingBits 我不确定只存在于函数中的数组如何也可以作为该函数的参数?