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

标签 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;
}

我有这样的代码,但它不起作用。 参数 as * 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 中将多个列表(hlist)作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36612186/

相关文章:

c - 为什么我从代码中带有位域的 C union 获得此输出?

c - 压缩结构位域与#define'd 位掩码

c - 双指针和单指针共享同一个变量

c - 在 C 中打开性能

c - C 和 MPI 环境中的指针赋值

java - 如何在 Java 中循环参数

parameters - 参数和参数有什么区别?

bash - "sh -c"不接受额外参数的问题,UNIX,使用 execve()

将 uint** 转换为 uint

c - (int**)malloc(sizeof(int*))