2013-10-24 49 views
0

,所以我要求作出以下功能:(C)功能的二维数组

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

这将将两个矩阵相乘。第一个(MA)的尺寸为n,n,第二个(MB)的尺寸为n,m。我把一切都计划后,但我得到所造成的功能本身,它说的错误:

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

我知道我可以通过函数变化的东西修复(如将其更改为** MA和** MB),但事实是,我不应该那样做,因为我应该根据给予我的这个功能来制作我的程序。

所以我的问题是:有没有办法使这项工作无需改变功能?

+2

您必须声明该数组的最后一个维度的大小。例如'int ** multiplyM(int MA [] [N],int MB [] [M],int n,int m)'其中'N'和'M'是常数。 –

+2

你可以添加函数的代码吗? –

+0

在c中你需要指定数组的最后一个维度。 – Arpit

回答

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 ->   ^^^    ^^^ 
0

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

所以:

我知道我可以通过函数变化的东西(比如改变 它** MA和MB **),但事情是,我修复它不应该这样做, ,因为我应该根据这个函数制作我的程序 给了我。

不修改至少声明函数,你不会解决这个问题。

+0

在C 1999和更高版本中,维度不必是恒定的。例如,'int ** multiplyM(int n,int m,int MA [] [n],int MB [] [m]);'是一个有效的声明。 –

+0

非常感谢您的帮助。根据你的评论,我已经更新了我的答案。 –