gpt4 book ai didi

c - 理解链表中的指针

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

我很难理解指针。我的印象是,如果“指针 a”指向“指针 b”,假设“指针 b”发生变化,“指针 a”也会随之改变。

但是,在链表的情况下,比如下面的

struct Node *deleteFirst(struct Node *head)
{
if(head != NULL)
{
// store the old value of head pointer
struct Node *temp = head;

// Change head pointer to point to next node
head = head->next;

// delete memory allocated for the previous head node
free(temp);
}

return head;
}

为什么'head = head->next;'时temp的指针没有变化?运行?

谢谢!

最佳答案

在上面的注释中重申,struct Node *temp = head;head 的指针值副本保存到 temp。在 head = head->next; 之后,不会更改 temp,因为它只保存 head 的副本值。

为了演示原理但是用整数

#include <stdio.h>

int main()
{
int a = 5;
int b = 42;

int* a_ptr = &a;
int* c = a_ptr; /* c holds a copy of the address of a */

a_ptr = &b; /* Changes to a_ptr does not affect c */
printf("%p != %p",a_ptr, c);

return 0;
}

示例输出

0x7fff5faceb08 != 0x7fff5faceb0c

也许你的想法是,当一个指针 a 指向另一个指针 b 时,a 引用了 b,随后对 b 的更改也会影响 a。然而,情况并非如上例所示。要模拟引用的效果,您需要原始值的地址。

#include <stdio.h>

int main()
{
int a = 5;
int b = 42;

int* a_ptr = &a;
int** c = &a_ptr;

a_ptr = &b;
printf("%p == %p",a_ptr, *c);
}

输出

0x7fff5dae7b08 == 0x7fff5dae7b08

此处对 a_ptr 的更改会影响 *c

关于c - 理解链表中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45901537/

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