c - 头指针指向指针

标签 c pointers

我发现这个链表例程(来自 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 的值。

当您要更改的变量已经是指针时,它也适用。在这种情况下,您必须将指针传递给该指针,因此当您更改此指针时,此更改会传播到调用者。

*headhead 指向的值。而 head 的类型为 item ***head 的类型为 item *

当你这样做时:

additem(item *head, item *newitem)
{
  newitem->next = head;
  head = newitem;
}

修改 head 的值不会影响它对调用者的值。无论如何,在这种情况下更改 head 是没有意义的。

关于c - 头指针指向指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24878072/

相关文章:

c - c中的自引用指针

c++ - cmake find_library 和 CMAKE_FIND_ROOT_PATH

c - win32api函数的顺序导致回调函数接收相同的消息

c - 如何使用可选的 GNU guile 库 ("--with-guile"来配置.ac)

c++ - C函数将原始图像转换为png

无法将结构的地址分配给类型为指向该结构的指针的 typedef 的变量

c - 如何在C程序中使用sin、tan、cos、sec?

c++ - 将指针声明为类成员 C++

C++ - 即使使用指针后也进行对象切片

c - 具有不同返回类型的函数指针 C