我想交換對象的作業問題,使用void指針交換對象。我的函數的聲明必須是:使用指針交換對象
void swap(void *a, void *b, size_t size);
我不是在尋找確切的代碼如何做到這一點,所以我可以通過我自己看着辦吧,但我不知道如果我理解正確。我發現有一個問題在做:
void *temp;
temp = a;
a = b;
b = temp;
只改變指針指向什麼。那是對的嗎?如果它是正確的,爲什麼不交換指針實際上改變了* a和* b之間的內容。因爲如果你的指針指向不同的東西,你不能解除引用它,並且對象現在會不同嗎?
類似的,只是切換的值,如:
void *temp;
*temp = *a;
*a = *b;
*b = *temp;
是不正確要麼,我不知道爲什麼。因爲在我看來,內容已被切換。
交換對象意味着完全交換內存和指針指向的值的值嗎?
因此,我似乎必須使用malloc爲我的交換分配足夠的空間。如果我爲一個對象分配足夠的內存,假設它們具有相同的大小,我真的不知道它與上述其他兩種方法有什麼不同。
void *temp = malloc(sizeof(pa));
// check for null pointer
temp = a;
// do something I'm not sure of since I don't quite get how allocating space is any
// different than the two above methods???
謝謝!
你靠近。不過,引用'void *'是不允許的。想想你可能會移動信息的其他方式,特別是考慮「size」參數以及對算法有什麼影響。 – 2010-02-09 21:39:55
更改指針是一個不錯的嘗試,但不會工作,因爲它們是按值傳遞的。因此調用者在調用之前在指針中將具有相同的值。 – 2010-02-09 23:43:57