【发布时间】:2013-12-15 09:48:40
【问题描述】:
我大部分时间都是系统管理员,但最近决定练习一些我的开发知识并尝试担任 devops 职位。因此,我一直在练习一些 C 和 Python 技能,并编写了一些用于将数字插入到链表中的代码。
void list_insert(struct list *h, int d)
{
struct list *elem = malloc(sizeof(struct list));
elem->data = d;
elem->next = NULL;
if (!h) {
h = elem;
} else {
elem->next = h;
h = elem;
}
}
我注意到这个函数似乎并没有改变变量 h 的外部视图(即传递给 list_insert 的任何内容),我注意到在插入函数末尾打印似乎有效。因此,尝试在线寻找答案后,我什么也找不到,很明显,但我发现大多数列表实现都会有双指针。我将函数更改为使用双指针,然后它突然开始工作。有人可以帮我理解这里发生了什么,因为我知道指针管理是一个重要的概念,我想我理解指针是什么以及它与内存的关系,但我不认为我明白为什么单个指针不会改变,而双指针可以。
谢谢!
【问题讨论】:
-
当您将参数传递给函数时,该参数将被复制,并且该函数使用原始副本。当您传递一个指针(pointer=int 被复制)并且您执行 *pointer=something 时,您修改了指针指向的数据,“允许您查看函数外部的更改”。因此, var * * 将是一个可写指针。
标签: c pointers linked-list