我正在尝试传递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/

10-11 06:35