将多维数组传递给C中的函数

时间:2012-10-27 17:04:54

标签: c function multidimensional-array parameter-passing

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

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'

我该如何解决?

3 个答案:

答案 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]);

我认为这会对你有帮助。