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 に答える