我有一个像这样的交换函数:
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个值。例如,当我交换(0,1,ptr)时,我得到数组
9,2,4,7,6,7,8,1
当我应该得到:
7,4,9,2,6,7,8,1
不是交换4和7,而是用9,2交换4,7。为什么要这样做?
答案 0 :(得分:5)
swap()
将数组视为指针数组,但传递的实际数组是int
类型的数组。显然,你的系统是这样的,指针的大小是两个int
,因此每次交换一个“指针”时,它实际上都是交换两个整数。
你需要你的交换例程:
void swap(int i, int j, int arr[])
{
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}