所以我被要求做以下功能:
int **multiplyM(int MA[][], int MB[][], int n, int m)
将乘以两个矩阵。第一个(MA)的尺寸为n,n,第二个(MB)的尺寸为n,m。我已经完成了程序的一切,但是我得到了一个由函数本身引起的错误,它说:
“数组类型具有不完整的元素类型”
我知道我可以通过更改函数中的内容来修复它(比如将其更改为** MA和** MB),但问题是,我不应该这样做,因为我应该做我的程序基于这个给我的功能。
所以我的问题是:有没有办法让这项工作不改变功能?
答案 0 :(得分:0)
必须为MA
和MB
所以,
#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 -> ^^^ ^^^
答案 1 :(得分:0)
您无法像处理的那样将多维数组传递给函数。在声明函数时,您需要指定第二个维度(以及任何其他维度)的大小。在此指定大小非常重要。如果它不是强制性的,编译器将无法处理诸如Array[2][3]
之类的表达式。用作数组维的值必须是ANSI C和其他版本的常量,但它可以是C99和连续版本的变量。 C99标准引入了variable-length arrays功能,允许在运行时确定数组的大小。
所以:
#define N 10
#define M 5
int **multiplyM(int MA[][N], int MB[][M], int n, int m)
我知道我可以通过更改函数中的内容来修复它(比如更改 它是** MA和** MB),但问题是,我不应该这样做, 因为我应该根据这个功能制作我的程序 是给了我的。
至少不修改函数的声明,你不会解决这个问题。