2014-01-06 190 views
-2

我試圖通過3類型的片:從3D陣列通2D陣列切片到功能

enter image description here

在主函數:

winner = check_for_winner_slice(&arr3D[Z][0][0], X, Y) || check_for_winner_slice(arr3D[0][X][0], Z, Y) || check_for_winner_slice(arr3D[0][0][Y], Z, X); 

功能:

int check_for_winner_slice(char arr2D[N][N], int row, int col); 

但是我遇到了麻煩:expec特德'char (*)[4]'但參數類型'char *'

+0

我建議你編輯問題以使用'code'語法來提高可讀性。 – ja72

+1

@ ja72特別是,**包含代碼。** – 2014-01-06 20:27:32

回答

1

假設arr3D已被宣佈爲類似

char arr3D[M][N][N]; 

則表達式arr3D[i]將有鍵入char [N][N],這在大多數情況下會「衰減」到類型char (*)[N]的表達式。

所以你應該需要做的是你的函數調用改變

winner=check_for_winner_slice(arr3D[Z], X, Y); 

EDIT沿着其他兩個維度

切片會要求你創建一個臨時的二維數組:

char temp[N][N]; 

for (size_t i = 0; i < N; i++) 
    for (size_t j = 0; j < N; j++) 
    temp[i][j] = arr3D[i][X][j]; 

winner = check_for_winner_slice(temp, Z, Y); 

for (size_t i = 0; i < N; i++) 
    for (size_t j = 0; j < N; j++) 
    temp[i][j] = arr3D[i][j][Y]; 

winner = check_for_winner_slice(temp, Z, X); 
+0

謝謝,但我該如何製作其他2片?! – user1980750

+0

@ user1980750:看我的編輯。 –

+0

非常感謝! – user1980750

1

錯誤是因爲您傳遞了錯誤的參數給你的函數。 &arr3D[Z][0][0]類型爲char *(編譯器會警告您這一點),但您的函數需要char (*)[4]類型。
arr3D[](是char (*)[N]型的,我覺得N是(宏)4這裏。),而不是

winner=check_for_winner_slice(arr3D[], X, Y);