gpt4 book ai didi

c - 指针到指针和链表,按值传递参数

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:33 25 4
gpt4 key购买 nike

背景是我正在通过实现链表来试验 C 中的指针到指针。我的问题是关于两段代码的区别,以及为什么第一段代码给出了预期的输出,而另一段代码却没有。为什么第一段代码没有将代码 2 似乎执行的功能提前到“外部”?

void add_node(int x, Node **head){
if(*head == NULL){
Node *new_node = (Node*) malloc(sizeof(new_node));
new_node->x = x;
*head = new_node;
} else {
Node *n = *head;

while(n->next != NULL){
n = n->next;
}

Node *new_node = (Node*) malloc(sizeof(new_node));
new_node->x = x;
n->next = new_node;
}
}

如果我添加 4 个元素并在每次添加后打印列表,则输出符合预期:1 | 12 | 123 |第1234章

void add_node(int x, Node **head){
if(*head == NULL){
Node *new_node = (Node*) malloc(sizeof(new_node));
new_node->x = x;
*head = new_node;
} else {
while((*head)->next != NULL){
*head = (*head)->next;
}

Node *new_node = (Node*) malloc(sizeof(new_node));
new_node->x = x;
(*head)->next = new_node;
}
}

输出如下:1 | 12 | 23 | 34

最佳答案

在第一个示例中,您使用指针 n 遍历链表,将其分配给 n->next,这正是您想要遍历链表的方式。在第二个示例中,您正在更改头指针指向的内容:

*head = (*head)->next;

您实际上是将链表的开头移动到另一个节点,这就是您出现这种行为的原因。

关于c - 指针到指针和链表,按值传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33988367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com