【问题标题】:How to call a function that has as arguments an array of pointers? in C如何调用以指针数组为参数的函数?在 C 中
【发布时间】:2014-03-29 15:14:08
【问题描述】:

我需要合并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.

}

请帮忙。

【问题讨论】:

    标签: c arrays pointers linked-list


    【解决方案1】:

    您正在传递一个指向数组的指针,而不是传递您的函数所期望的指针数组。

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

    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
    }
    

    【讨论】:

    • 我有以下代码:typedef struct LIST{ NODE *first; NODE *last; }LIST; void main(){ int result[10*LISTE],size=10; LIST* list[LISTE]; int i=0,j=0; for(i=0;i&lt;LISTE;i++){ int vect[MAX]; FillRandomArray(vect,size,10,20000,false,1); list[i]-&gt;first=NULL; list[i]-&gt;last=NULL; }} 当我尝试修改 list[i]->first 时出现错误。为什么?我该怎么做?
    • @StanLeyDane 那是因为list[] 是一个未初始化的指针数组。在访问 list[i]-&gt;... 之前,您需要为元素分配内存 - 例如,list[i] = malloc(sizeof(LIST)); 当然,您需要在程序结束后释放每个元素。
    • 是的,就是这样。经过大量的试验和错误,我设法使它工作。它现在成功地将列表合并在一起。非常感谢您的帮助,继续努力!
    • @StanLeyDane 欢迎您!如果问题现在已解决,请考虑通过单击旁边的灰色复选标记来接受答案。这会告诉其他人您的问题已解决,并为您赢得 Stack Overflow 上的全新徽章。
    【解决方案2】:

    尝试动态分配数组。

    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);
    

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      相关资源
      最近更新 更多