2014-01-06 191 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);