所以我在C中用数组调用heapsort。
我的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
更改为指向新数组,因为函数返回类型为void。有没有办法用指针做这个,或者我只需要memcpy
数组?
答案 0 :(得分:3)
数组不能直接赋值,也不能在函数外部使用tmp
,因为它在函数返回时超出了范围。您必须使用memcpy()
。
答案 1 :(得分:2)
如果您想更改keys
指向的内容,则必须将其声明为int **
。并使用显式动态分配(使用malloc
)而不是C99可变长度数组。
答案 2 :(得分: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)
}