我找到了这个链表例程(来自Haviland的Unix系统编程),可以将一个项目添加到单链表中。
additem(item **head, item *newitem)
{
newitem->next = *head;
*head = newitem;
}
我的困难在于试图理解这一item **head
部分。什么是**head
真的呢?为什么不item *head
按如下方式定义例程:
additem(item *head, item *newitem)
{
newitem->next = head;
head = newitem;
}
它是指向指针的指针。
在C语言中,您无法更改按值传递的变量,因为参数被视为局部变量。您必须改为传递其指针,然后修改的值*variable
。
当您要更改的变量已经是指针时,它也适用。在这种情况下,您必须将指针传递给该指针,因此,当您更改此指针时,此更改将传播到调用方。
*head
该值head
指向。虽然head
是类型的item **
,但是*head
是类型的item *
。
执行此操作时:
additem(item *head, item *newitem)
{
newitem->next = head;
head = newitem;
}
修改的值head
不会影响调用者的价值。出于所有目的,head
在这种情况下进行更改毫无意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句