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()2つ必要です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 に答える