我发现这个链表例程(来自 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
是没有意义的。
关于c - 头指针指向指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24878072/