我正在尝试传递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 *'
。 最佳答案
假设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 );
关于c - 将2D数组切片从3D数组传递给函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20958598/