我正在尝试传递 3种类型的切片:
在主要功能中:
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);
但是我遇到了麻烦:期望'char (*)[4]'
但参数类型为'char *'
。
答案 0 :(得分:1)
错误是因为您向函数传递了错误的参数。 &arr3D[Z][0][0]
的类型为char *
(因为编译器会对此发出警告),但您的函数需要char (*)[4]
类型。
通过arr3D[]
(类型为char (*)[N]
,我认为此处N
是(宏)4
。)而不是
winner=check_for_winner_slice(arr3D[], X, Y);
答案 1 :(得分:1)
假设arr3D
已被宣布为
char arr3D[M][N][N];
然后表达式arr3D[i]
将具有类型char [N][N]
,在大多数情况下,它将“衰减”为类型char (*)[N]
的表达式。
所以您需要做的就是将函数调用更改为
winner=check_for_winner_slice(arr3D[Z], X, Y);
修改强>
沿着其他两个维度切片将需要您创建一个临时2D数组:
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 );