0

そのため、次の関数を作成するように求められます。

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

これは2つの行列を乗算します。最初のもの (MA) は次元 n、n で、2 つ目 (MB) は次元 n、m です。プログラムですべてを完了しましたが、関数自体が原因で次のようなエラーが発生します。

「配列型に不完全な要素型があります」

関数内のものを変更することで修正できることはわかっていますが (**MA や **MB に変更するなど)、プログラムをベースにする必要があるため、そうする必要はありません。私に与えられたこの機能について。

だから私の質問は:関数を変更せずにこれを機能させる方法はありますか?

4

2 に答える 2

0

多次元配列を関数に渡すことはできません。関数を宣言するときに、2 番目の次元 (およびそれ以上の次元) のサイズを指定する必要があります。ここでのサイズの指定は重要です。必須でない場合、コンパイラはそのような式を処理できません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 に答える
0

および の 2 番目の次元を指定する必要があります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 に答える