我知道,要使函数写入参数,我们需要将指针传递给该参数。如果我们要修改链接列表,情况也是如此。我很难理解的是,为什么我们需要声明一个指针类型P *而不是仅仅声明普通类型来修改链接列表?
两个示例之间的主要区别是什么?
int function(struct list_t** list){
}
int function(struct list_t* list){
}
我可以说在两个示例中,我都将指针传递给参数,从技术上讲,这使我可以编辑链接列表。
答案 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语言中的按引用传递,后者仅具有按值传递。如您所说,如果您有一个指向指针的指针,则可以取消引用它并使它指向其他位置。使用普通指针时,它将按值传递,并将值复制到参数变量中。修改副本不会修改原始副本。