我有交換功能,像這樣:使用交換函數void指針
void swap(int i, int j, void* arr[])
{
void *temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
我叫交換主像這樣:
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,它是交換4 ,7與9,2。它爲什麼這樣做?
看起來你是一個64位系統,默認情況下爲您提供了64位上,儘量的sizeof ARR的一個printf [0]和sizeof int來驗證,你可以傳遞一個額外的參數來存儲大小,並且在memcpy中使用一個char [size]緩衝區,或者如果你確認它們是不同的地址,就使用xor swap(換句話說,不要交換1和1) – technosaurus