堆的交换功能似乎很棘手

时间:2012-04-17 02:03:53

标签: c

哟。我有这个非常简单的交换功能似乎不起作用。可能是一个指针问题所以任何建议都会很好。

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]保持不变。任何建议表示赞赏。

2 个答案:

答案 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]的值,它获取其地址。