(C)具有二维数组的函数

时间:2013-10-24 19:10:25

标签: c arrays dimensional

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

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

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

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

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

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

2 个答案:

答案 0 :(得分: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 ->           ^^^                ^^^

答案 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),但问题是,我不应该这样做,   因为我应该根据这个功能制作我的程序   是给了我的。

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