gpt4 book ai didi

c - 单指针和双指针追加的区别

转载 作者:行者123 更新时间:2023-11-30 18:34:11 24 4
gpt4 key购买 nike

这可能是一个愚蠢的问题,但我真的很想知道为什么会发生这种情况。当尝试为链表创建追加函数时,为什么这个单指针解决方案不起作用,但当使用双指针时它起作用?

单指针:

void append(node *head, int value){
node *current = head;
node *new = malloc(sizeof(node));
if (new == NULL){
printf("couldn't allocate memory");
return;
}
new->value = value;
new->next = NULL;
if (head == NULL){
head = new;
return;
}
while (current->next != NULL)
current = current->next;
current->next = new;
return;}

双指针:

void append(node **head, int value){
node *current = *head;
node *new = malloc(sizeof(node));
if (new == NULL){
printf("couldn't allocate memory");
return;}
new->value = value;
new->next = NULL;
if (*head == NULL){
*head = new;
return;
}
while (current->next != NULL)
current = current->next;
current->next = new;
return;}

最佳答案

当使用参数调用函数时,会在堆栈上创建该参数的副本。因此在某种程度上,它们与局部变量非常相似。

在单指针情况下,语句 head = new; 实际上只会导致参数 head 发生更改,并且此更改不会传播回传递的实际头。

在双指针情况下,您将获得 head 的地址,您可以通过执行 *head = new; 来更改该地址。

关于c - 单指针和双指针追加的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53041553/

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