0

所以我在 C 中的一个数组上调用 heapsort。

我的堆排序函数如下所示:

void heapSort(int keys[], int numKeys){
...
int tmp[numKeys];
for(int i=0; i<numKeys; i++){
    tmp[i] = maxVaue(h);
    deleteMax(h);
}

*keys = tmp;
}

我要做的是更改keys为指向新数组,因为函数返回类型是无效的。有没有办法用指针来做到这一点,还是我只需要memcpy数组?

4

3 回答 3

3

数组不能直接赋值,也不能tmp在函数外使用,因为函数返回时它超出了范围。您必须使用memcpy().

于 2013-04-30T04:37:10.600 回答
2

如果要更改keys指向的内容,则必须将其声明为int **. 并使用显式动态分配(使用malloc)而不是 C99 可变长度数组。

于 2013-04-30T05:32:13.867 回答
1
void heapSort(int **keys, int numKeys){
    int tmp = malloc(sizeof(int)*numKeys);
    ...
    free(*keys);
    *keys = tmp;
}

int main(){
    int *keys = malloc(sizeof(int)*numKeys);
    ...
    heapSort(&keys, numKeys)
}    
于 2013-04-30T05:41:10.640 回答