在将其标记为重复之前,我已阅读
In C, what does a variable declaration with two asterisks (**) mean?
I don't understand the implementation of inserting a new node in linked list
我仍然在努力解决双星号的逻辑步骤。我知道在链表中我需要创建一个新节点,为其动态分配空间,然后将新节点重新标记为头。
我只是不明白 &head
和双星号之间的函数的逻辑步骤。这里的双星号指的是什么以及如何实现?
void push(struct node** head_ref, int new_data)
{
struct node* new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = new_data;
new_node->next = (*head_ref);
(*head_ref) = new_node;
}
push(&head, 2);
最佳答案
由于调用者传递 &head
作为第一个参数,
head_ref
等于&head
*head_ref
等于head
。
因此,调用 push(&head, 2)
与在调用方中编写代码具有相同的最终效果,如下所示。
/* struct node **head_ref = &head; */
struct node *new_node = malloc(sizeof(struct node));
new_node->data = 2;
new_node->next = head; /* new_node = (*head_ref) */
head = new_node; /* (*head_ref) = new_node */
我已经注释掉了 head_ref
的所有用法,因为它是函数的本地变量,调用者看不到。最后两个语句中的注释显示了等效性。
请注意,我还删除了 malloc()
结果的类型转换,因为这样的事情在 C 中通常被认为是不好的做法。
关于c - C函数中的指针到指针;链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48854322/