2013-10-24 46 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

非常感謝您的幫助。根據你的評論,我已經更新了我的答案。 –