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是一个堆指针,index1并且index2保证是有效的索引。

student *temp确实得到了的值,heaparray[index1]但是当heaparray[index2]被分配临时值时,heaparray[index2]保持不变。任何建议表示赞赏。

4

2 回答 2

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;    
}
于 2012-04-17T02:37:07.473 回答
3

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

于 2012-04-17T02:05:28.253 回答