我写这个函数来交换多维数组中的值,我理解数组是指针。
void
swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
然而,当我尝试使用该功能时
swap(board[d-1][d-2]), board[d-1][d-33];
我从编译器中得到这些错误,我不知道原因:
fifteen.c: in function 'init':
fifteen.c:166:9: error: passing argument 1 of 'swap' makes pointer from integer without a cast [-werror]
fifteen.c:45:6: note: expected 'int *' but argument is of type 'int'
fifteen.c:166:9: error: passing argument 2 of 'swap' makes pointer from integer without a cast [-werror]
fifteen.c:45:6: note: expected 'int *' but argument is of type 'int'
我该如何解决?
答案 0 :(得分:3)
board[d-1][d-2]
和board[d-1][d-33]
是int
。要交换两者,您必须传递其地址:
swap (&board[d - 1][d - 2]), &board[d - 1][d - 33];
如果您使用swap (board[d - 1][d - 2]), &board[d - 1][d - 33])
,说明int tmp = *a;
会尝试访问地址board[d - 1][d - 2]
上的值:这没有任何意义!因为您正在使用指针,所以必须传递变量的地址。
答案 1 :(得分:2)
您需要传递地址(swap()
需要两个int *
):
swap (&board[d-1][d-2], &board[d-1][d-33]);
答案 2 :(得分:0)
交换(董事会[d-1] [d-2]),董事会[d-1] [d-33]);
你必须实际传递变量的地址。所以调用这个函数的正确方法如下。
交换(& board [d-1] [d-2]),& board [d-1] [d-33]);
我认为这会对你有帮助。