二维数组类型错误

时间:2016-10-15 14:55:57

标签: c arrays

基本上,在下面的代码中,我有一个初始化二维数组的函数。在main函数中,我尝试用不同大小的数组测试函数。但是,我收到以下错误:"错误:数组类型具有不完整的元素类型  void chessBoard(char board [] [],int length,int width)"和"错误:形式参数1的类型不完整"。    chessBoard(board1,length1,width1);.有什么建议吗?

    #include <stdio.h>
    #include <stdlib.h>

    void chessBoard(char board[][], int length, int width)
    {
      for (int i = 0; i < length; i++)
      { 
        for (int j = 0; j < width; j++)
          if ((i + j) % 2 == 0)
            board[i][j] = 'b';
          else 
            board[i][j] = 'w';
      }
    }

    int main()
    {
      char board1 [3][4];
      int length1 = sizeof board1 / sizeof board1[0];
      int width1 = sizeof board1[0] / sizeof(int);
      chessBoard(board1, length1, width1);
      int i, j;
      for(i = 0; i < length1; i++)
      {
        for(j = 0; j < width1; j++)
          printf("%c", board1[i][j]);

        printf("\n");
      }
      printf("\n");
}

2 个答案:

答案 0 :(得分:0)

你应该声明你的功能:

void chessBoard(char board[][4], int length, int width)

C FAQ彻底解释了原因。它的要点是数组一旦衰减成指针,它不会递归地发生。数组数组衰变为指向数组的指针,而不是指向指针的指针。根据C标准,您可以将任何维数组传递给函数,只要您将所有维度指定为常量(第一个除外)(可以为空白)。

答案 1 :(得分:0)

你也可以像这样声明你的函数。void chessBoard(char board[][width], int length)int width是全局变量。

#include <stdio.h>
#include <stdlib.h>
int width;//Global Variable
void chessBoard(char board[][width], int length){
    int i,j;
    for ( i = 0; i < length; i++){
        for ( j = 0; j < width; j++){
            if ((i + j) % 2 == 0)
                board[i][j] = 'b';
            else
                board[i][j] = 'w';
        }//inner loop end
    }//outer loop end
}
int main(){
    char board1[3][4];
    int length1 = sizeof(board1) / sizeof(board1[0]);
    int width1 = sizeof(board1[0]) / sizeof(board1[0][0]);
    width = width1;
    chessBoard(board1, length1);
    int i, j;
    for(i = 0; i < length1; i++){
        for(j = 0; j < width1; j++)
            printf("%c ", board1[i][j]);
            printf("\n");
    }
    printf("\n");
}