2012-04-17 59 views
1

呦。我有這個非常簡單的交換功能,似乎無法正常工作。可能是一個指針問題,所以任何建議都會很好。堆交換功能似乎扭曲

void swap(pQueue *h, int index1, int index2) { 
    student *temp = &h->heaparray[index1]; 
    h->heaparray[index1] = h->heaparray[index2]; 
    h->heaparray[index2] = *temp;  
} 

pQueue是堆指針,index1index2保證是有效索引。

student *temp確實得到了heaparray[index1]的值,但是當heaparray[index2]被指定爲臨時值時,heaparray[index2]保持不變。任何意見讚賞。

回答

5

您需要的h->heaparray[index1](而不是它的地址)的實際值複製到temp再後來該值複製到h->heaparray[index2],就像這樣:

void swap(pQueue *h, int index1, int index2) { 
    student temp = h->heaparray[index1]; 
    h->heaparray[index1] = h->heaparray[index2]; 
    h->heaparray[index2] = temp;  
} 
+0

啊,這個伎倆。謝謝! – Paha 2012-04-17 02:46:34

+1

@Paha如果解決了您的問題,請接受答案。 – 2012-04-17 03:07:43

3

*temp沒有得到值heaparray[index1],它得到它的地址。

+0

那麼,如何讓節點在物理上轉移? – Paha 2012-04-17 02:08:38

+0

其實,'* temp'確實得到了值;它是'temp'獲取地址。 – jwodder 2012-04-17 02:35:36

+0

這是真的..我測試了它,我可以調用節點的所有值。那麼,爲什麼臨時任務不工作? – Paha 2012-04-17 02:37:57