在C中排序数组时处理指针

时间:2013-04-30 04:28:04

标签: c pointers sorting

所以我在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数组?

3 个答案:

答案 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)
}