0

次のようなスワップ機能があります。

void swap(int i, int j, void* arr[])
{
    void *temp;
    temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

次のようにメインで swap を呼び出します。

main()
{
    int arr[8] = {4,7,9,2,6,7,8,1};
    void *ptr = arr;
    swap(0, 1, ptr);
    int k;
    for (k=0; k<8; k++)
        printf("%d ", arr[k]);
}

現在、スワップは正常に機能しているように見えますが、1 つの値を別の値と交換する代わりに、2 つの値を別の 2 つの値と交換しています。たとえば、swap(0, 1, ptr) を実行すると、配列が取得されます

9,2,4,7,6,7,8,1

私が得るべきとき:

7,4,9,2,6,7,8,1

4 と 7 を交換する代わりに、4,7 を 9,2 と交換しています。なぜこれを行うのですか?

4

1 に答える 1

5

swap()は配列をポインターの配列として扱っていますが、実際に渡される配列は type の配列ですint。どうやら、あなたのシステムはポインタが 2 のサイズであるintように見えるため、「ポインタ」を交換するたびに、実際には 2 つの整数を交換しています。

スワップ ルーチンを次のようにする必要があります。

void swap(int i, int j, int arr[])
{
    int temp;
    temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
于 2012-11-28T02:46:30.160 に答える