1

我写了这个函数来交换多维数组中的值,因为我理解数组是指针。

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'

我如何解决它?

4

3 回答 3

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]:这没有任何意义!因为您使用的是指针,所以您必须传递变量的地址。

于 2012-10-27T17:06:06.070 回答
2

您需要传递地址(swap()预计两个int *):

swap (&board[d-1][d-2], &board[d-1][d-33]);
于 2012-10-27T17:06:32.910 回答
0

你传递了错误的论点

交换(板[d-1][d-2]),板[d-1][d-33]);

您实际上必须传递变量的地址。因此,调用此函数的正确方法如下。

交换 (&board[d-1][d-2]), &board[d-1][d-33]);

我想这会对你有所帮助。

于 2012-10-27T17:55:34.797 回答