为什么指向结构的指针在函数中不可重写?

Why is a pointer to a structure not overridable in a function?

让我们看一下这段代码:

typedef struct nodes{
    int val;
    struct nodes next;
} node;

insertHead(node *list, int val) {
    node *temp = malloc(sizeof(node));
    temp->val;
    temp->next = list;
    list = temp;
}

int main() {
    node *list = NULL;
    insert(list, 5);
}

在这里,如果我尝试调用 list->val 它不起作用,就好像它传递了列表的副本并且实际上并没有设置列表的新头。

typedef struct nodes{
    int val;
    struct nodes next;
} node;

insertHead(node **list, int val) {
    node *temp = malloc(sizeof(node));
    temp->val;
    temp->next = *list;
    *list = temp;
}

int main() {
    node *list = NULL;
    insert(&list, 5);
}

我知道这会起作用,但我的实际问题是为什么第一个示例不起作用。我的意思是我将 list 传入函数,而 list 是指向结构的指针。我是 C 的新手,但传入结构地址以更改其成员并可能覆盖它是否正确。我完全理解,如果我使用 *list 传入结构本身,这是行不通的,因为它只会创建一个副本。 但是 node *list 不是副本,它是指向实际结构的指针,那么为什么我需要使用指向结构的指针来执行此操作?

P.S:我是 C 的新手,所以不要太苛刻地判断。顺便说一句,这将是一个链表。

因为你要修改的是指针本身,而不是引用的值。要修改它,你需要将指针传递给这个指针

类似于“普通”类型。如果传递整数,则不能在函数中修改它。要存档,您需要传递指针。