将2D数组切片从3D数组传递到函数

时间:2014-01-06 20:23:45

标签: c arrays

我正在尝试传递 3种类型的切片

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);

但是我遇到了麻烦:期望'char (*)[4]'但参数类型为'char *'

2 个答案:

答案 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 );