传递2d数组时发出警告

时间:2009-05-08 00:52:27

标签: c arrays pointers

我有以下功能

void initBoard(int * board[BOARD_ROWS][BOARD_COLS]){
  int z = 0;
  for( z = 0; z<10; z+=1){
     int l;
     for( l = 0; l<10; l+=1){
        board[z][l] = 0;
     }
  }
}

从主要我称之为

  int plBoard[10][10];
  initBoard(&pcBoard);

编译时有效但我得到一个警告说:警告:从不兼容的指针类型传递'initBoard'的参数1。 array是一个整数,函数需要一个int指针,我传递的是int的地址。这有什么问题?

4 个答案:

答案 0 :(得分:12)

除了问题中明显的拼写错误(plBoard的定义,但使用pcBoard)之外,您不需要使用address-of运算符({{1})传递数组因为它们会自动转换为地址。

但是您的&问题是由使用:

引起的
incompatible type

实际上是int * board[BOARD_COLS][BOARD_ROWS] 指针的二维数组(技术上是一个指向int的指针数组的数组),而不是你期望的整数。

您应该使用:

int

答案 1 :(得分:1)

我不完全确定,但我相信这是因为:

initBoard期待一个指向整数指针的数组数组。

然而,plBoard是一个整数的数组数组的指针

答案 2 :(得分:0)

从技术上讲,您将指针的内存地址发送到initBoard()。当你声明一个数组(在这种情况下是plBoard)时,它指向一个内存地址,其中连续的内存保存你的数据项......所以说这个是多余的......

int plBoard[10][10];  initBoard(&pcBoard);

Pax有你的答案,我只是因为你还没有把它标记为答案而受到了谴责。

答案 3 :(得分:0)

只是在同一页面上......我完全同意Pax ..

  

Blockquote int pcBoard [10] [10];   Blockquote initBoard(&amp; pcBoard);

现在假设pcBoard [0] [0]指向第101个位置(32位地址),依此类推...... 你通过意义&amp; pcBoard传递的是pcBoard [0] [0]的32位地址。 所以当功能

  

Blockquote void initBoard(int * board [BOARD_ROWS] [BOARD_COLS]){

使用它..它显示一个错误,表示它期望二维数组,而它在32位地址中得到的是4字节(int)。

只是一个提示,你不需要在传递时指定两个板[BOARD_ROWS] [BOARD_COLS] ..你可以方便地消除BOARD_ROWS并只指定BOARD_COLS。