0

我有一个像这样的交换功能:

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

我在 main 中调用 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。显然,您的系统是这样的,一个指针的大小是两个ints,所以每次它交换一个“指针”时,它实际上是交换两个整数。

你需要你的交换例程是这样的:

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 回答