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

在C中对数组排序时处理指针,c,pointers,sorting,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; } void heapSort(int key[],int numKeys){ ... int tmp[numK

所以我在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;
}
void heapSort(int key[],int numKeys){
...
int tmp[numKeys];

for(int i=0;i数组不可直接赋值,也不能在函数外使用
tmp
,因为函数返回时它超出范围。必须使用
memcpy()

数组不可直接分配,也不能在函数外使用
tmp
,因为函数返回时它超出了范围。必须使用
memcpy()(使用
malloc
)而不是C99可变长度数组。

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

数组是不可赋值的,并且不能在函数外使用
tmp
(函数返回时它超出范围),因此需要使用
memcpy()
无论如何。好的,谢谢。我只是想知道这是否可能。数组是不可分配的,并且您不能在函数外使用
tmp
(函数返回时它超出范围),因此您需要使用
memcpy()好的,谢谢。我只是想知道是否有可能。请考虑。谢谢。好了,收到。谢谢提醒。谢谢。好的,收到。谢谢提醒。
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)
}