哟。我有这个非常简单的交换功能似乎不起作用。可能是一个指针问题所以任何建议都会很好。
void swap(pQueue *h, int index1, int index2) {
student *temp = &h->heaparray[index1];
h->heaparray[index1] = h->heaparray[index2];
h->heaparray[index2] = *temp;
}
pQueue
是一个堆指针,index1
和index2
保证是有效索引。
student *temp
确实获得heaparray[index1]
的值,但在为heaparray[index2]
分配临时值时,heaparray[index2]
保持不变。任何建议表示赞赏。
答案 0 :(得分: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;
}
答案 1 :(得分:3)
*temp
未获得heaparray[index1]
的值,它获取其地址。