(C) 二维数组函数

(C) 二维数组函数,c,arrays,dimensional,C,Arrays,Dimensional,所以我被要求做以下函数: int **multiplyM(int MA[][], int MB[][], int n, int m) 将两个矩阵相乘。第一个(MA)尺寸为n,n,第二个(MB)尺寸为n,m。我已经完成了程序的所有操作,但是我得到了一个由函数本身引起的错误,它说: “数组类型的元素类型不完整” 我知道我可以通过更改函数中的内容(比如将其更改为**MA和**MB)来修复它,但问题是,我不应该这样做,因为我应该根据提供给我的函数来制作程序 所以我的问题是:有没有一种方法可以在不改变功

所以我被要求做以下函数:

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

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

我知道我可以通过更改函数中的内容(比如将其更改为**MA和**MB)来修复它,但问题是,我不应该这样做,因为我应该根据提供给我的函数来制作程序


所以我的问题是:有没有一种方法可以在不改变功能的情况下实现这一点?

必须为
MA
MB

所以


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

因此:

我知道我可以通过改变函数中的内容(比如改变 这是对**MA和**MB)的,但问题是,我不应该这么做, 因为我的程序应该基于这个函数 是给我的


如果不至少修改函数的声明,则无法解决此问题。

必须声明数组最后一个维度的大小。例如
int**multiplyM(int-MA[][N],int-MB[][M],int-N,int-M)
其中
N
M
是常量。您可以添加函数的代码吗?在c中,您需要指定数组的最后一个维度。不,最后一个!函数声明中唯一可以省略的维度是第一个维度。必须指定所有其他尺寸。为了证明这一点,请尝试在不知道第二列大小的情况下计算
数组[3][4][6]
的地址:DIn C 1999及更高版本,尺寸不需要恒定。例如,
int**multiplyM(int n,int m,int MA[][n],int MB[][m])是有效的声明。非常感谢您的帮助。我已经根据你的评论更新了我的答案。
#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 ->           ^^^                ^^^
#define N 10
#define M 5 

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