2013-01-10 28 views
0

所以我正在這個代碼,其中我試圖二維陣列傳遞給一個函數,如下所示:硬時間傳遞二維陣列到功能

函數簽名:無效F(陣列[4] [4],int n);

int array [4][4]; 
f(&array[0][0],16) 
for (int i=0;i<n;i++) // I'm working by c99 standard. 
{ 
hist[ *(&array[0][0] +i) ] ++ ; // I know the max value in array[4][4] , and hist is initialized accordingly. 
} 
} 

我只是不斷收到關於不兼容類型的各種錯誤,例如,我得到「預期(*)[4],但類型是INT * 幫助?:)

+0

如果你只是做'f(array,16)',會發生什麼? –

回答

0

&array[0][0]是INT指針。

甲指針不能被轉換爲一個二維陣列。出於這個原因,需要將它傳遞像f(array, 16)。基本上你正在傳遞的int*,這是與int[][4]不相容。

值得指出的是,這是有效的一個維數組(雖然這是不必要的和潛在的混亂):

void g(int x[]) {} 
int arr[4]; 
g(arr); //valid of course 
g(&arr[0]); //also valid 

This解釋了爲什麼它與多維數組不同。

+0

這句法有效嗎? (int i = 0; i Caesar23

+0

@ user1965208'f(array,n)'是一個無效的函數簽名。另外,如果數組是2d數組,則應該使用'array [i] [j]'。儘管如此,'*(*(array + i)+ j)'確實是正確的 - 至少在語法上是這樣的。 – Corbin

+0

實際上,我已經在第一條評論中聲明瞭函數的簽名,其次,事後看來,我意識到你是正確的,使用括號可能會更容易,但是這個錯誤讓我受益匪淺,因爲我學到了很多東西關於過去一小時左右的多維數組。 無論如何,謝謝你的回覆:) – Caesar23