在函数的参数中声明指针类型以修改链表

时间:2019-01-24 19:13:32

标签: c pointers linked-list

我知道,要使函数写入参数,我们需要将指针传递给该参数。如果我们要修改链接列表,情况也是如此。我很难理解的是,为什么我们需要声明一个指针类型P *而不是仅仅声明普通类型来修改链接列表?

两个示例之间的主要区别是什么?

int function(struct list_t** list){

}
int function(struct list_t* list){

}

我可以说在两个示例中,我都将指针传递给参数,从技术上讲,这使我可以编辑链接列表。

1 个答案:

答案 0 :(得分:2)

使用struct list_t* list,则list是指向list_t的指针。

对于struct list_t** list,则list是指向list_t的指针的指针。

如果您有

list_t* my_list;

然后my_list是指向list_t的指针。然后,如果您使用地址运算符&来获取指向my_list的指针(如&my_list),那么您将获得指向list_t的指针的指针。是list_t**


使用指针的指针是为了模拟C语言中的按引用传递,后者仅具有按值传递。如您所说,如果您有一个指向指针的指针,则可以取消引用它并使它指向其他位置。使用普通指针时,它将按值传递,并将值复制到参数变量中。修改副本不会修改原始副本。