我正在尝试传递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);
编辑
沿其他两个维度进行切片将需要您创建一个临时的二维数组:
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/