我有以下功能
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的地址。这有什么问题?
答案 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。