如何在C中将多个列表(hlist)作为函数参数传递

时间:2016-04-14 01:14:28

标签: c arguments double-pointer

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]'

1 个答案:

答案 0 :(得分:0)

在函数参数列表中,**hlist*hlist[]完全相同。因此,将一个改变为另一个不会产生任何影响。

这是因为C有&#34;数组衰减&#34;,也就是说,在大多数情况下,数组名称衰减到指向其第一个元素的指针。因此,无论您使用**hlist还是*hlist[],都不会复制整个数组。因此,无论如何都不能通过编写foo(hlist);来传递数组。

似乎你希望hlist是一个指向hlist_t的指针数组。如果是这样,请执行:

hlist_t *hlist[4];