hlist_t hlist[4];

int hlist_init (hlist_t **hlist) {
    int i;
    for (i = 0; i < 4 ; i++) {
    INIT_HLIST_HEAD ( hlist [i]);
    }

    return 1;
}



int main () {
    hlist_init (&hlist);

    return 0;
}


我有这样的代码,但它不起作用。
* * hlist []参数也不起作用。
我应该如何处理?
** hlist和* hlist []有何不同?

下面是代码的错误信息。
/media/hdd1/tcn/lbtest/main.c:20:5:警告:从不兼容的指针类型传递“ hlist_init”的参数1 [默认启用]
/media/hdd1/tcn/lbtest/main.c:6:5:注意:预期为“ struct hlist_t **”,但参数的类型为“ struct hlist_t(*)[4]”

最佳答案

在功能参数列表中,**hlist*hlist[]完全相同。因此,将一个更改为另一个不会有任何区别。

这是因为C具有“数组衰减”,即在大多数情况下,数组名称会衰减到指向其第一个元素的指针。因此,无论您使用的是**hlist还是*hlist[],都不会复制整个数组。因此,无论哪种情况,您都无法通过写入foo(hlist);来传递数组。

似乎您希望hlist是指向hlist_t的指针数组。如果是这样,请执行以下操作:

hlist_t *hlist[4];

关于c - 如何在C中将多个list(hlist)作为函数参数传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36612186/

10-10 18:14
查看更多