如何调用一个具有指针数组作为参数的函数?在C.

时间:2014-03-29 15:14:09

标签: c arrays pointers linked-list

我需要在O(n*logk)中合并K个有序列表。我正在尝试创建一个列表数组,我不知道如何调用某些函数(如min_heapify)。

void min_heapify(List *list[],int size);

void main() {
    List list[10]; // initialize all 10 list randomly in ascending order.
    min_heapify(&list,10); // This line won't compile.

}

请帮忙。

2 个答案:

答案 0 :(得分:2)

您正在传递指向数组的指针,而不是传递函数所需的指针数组。

你的函数需要一个列表指针数组,因为它有一个星号和一对括号:

List *list[] // <<== This means "an array of pointers to elements of type List"

要传递此函数一个指针数组,在main中声明一个指针数组,并进行调用:

void main() {
    List *list[10];
    // intitialize all 10 list pointers randomly in ascending order.
    for (int i = 0 ; i != 10 ; i++) {
        list[i] = malloc(...); // Initialize list at position i
    }
    min_heapify(list,10); // Remove the ampersand
}

如果您要传递一系列列表,请仅保留星号或方括号:

void min_heapify(List list[],int size);

或等效的

void min_heapify(List *list,int size);

main中的调用中删除&符号以正确编译:

void main() {
    List list[10]; // intitialize all 10 lists randomly in ascending order.
    min_heapify(list,10); // Remove the ampersand
}

答案 1 :(得分:0)

尝试动态分配数组。

List *list;    
list=malloc(sizeof(List)*10);
min_heapify(&list,10);

free(list); //when you don't need list anymore

这将起作用,因为

void min_heapify(List *list[],int size);

衰败到

void min_heapify(List **list,int size);