0

所以我被要求做以下功能:

int **multiplyM(int MA[][], int MB[][], int n, int m)

这将乘以两个矩阵。第一个 (MA) 的尺寸为 n, n, 第二个 (MB) 的尺寸为 n, m。我已经完成了程序的所有工作,但是我得到了一个由函数本身引起的错误,它说:

“数组类型的元素类型不完整”

我知道我可以通过更改函数中的内容来修复它(比如将其更改为 **MA 和 **MB),但问题是,我不应该这样做,因为我应该让我的程序基于关于给我的这个功能。

所以我的问题是:有没有办法在不改变功能的情况下完成这项工作?

4

2 回答 2

0

必须给出第二维MAMB

所以,

#define SIZE_M 5 //Any constant
#define SIZE_N 6

int **multiplyM(int MA[][SIZE_M], int MB[][SIZE_N], int n, int m)
       //Fix ->           ^^^                ^^^
于 2013-10-24T19:12:54.097 回答
0

您不能像这样做那样将多维数组传递给函数。在声明函数时,您需要指定第二个维度(以及任何其他维度)的大小。在这里指定大小很重要。如果它不是强制性的,编译器将无法处理这样的表达式Array[2][3]。用作数组维度的值对于 ANSI C 和其他版本必须是常量,但对于 C99 及后续版本,它可以是变量。C99 标准引入了 可变长度数组功能,允许在运行时确定数组的大小。

所以:

#define N 10
#define M 5 

int **multiplyM(int MA[][N], int MB[][M], int n, int m)

我知道我可以通过更改函数中的内容来修复它(比如将其更改为 **MA 和 **MB),但问题是,我不应该这样做,因为我应该让我的程序基于关于给我的这个功能。

至少不修改函数的声明,您将无法解决此问题。

于 2013-10-24T19:16:45.603 回答