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

C 为什么指向结构的指针在函数中不可重写?,c,function,pointers,struct,pointer-to-pointer,C,Function,Pointers,Struct,Pointer To Pointer,让我们看看这段代码: typedef结构节点{ int-val; 结构节点; }节点; 插入标头(节点*列表,int val){ node*temp=malloc(sizeof(node)); 温度->值; 临时->下一步=列表; 列表=临时; } int main(){ 节点*list=NULL; 插入(清单5); } 在这里,如果我尝试调用列表->val,它不会像传入列表副本一样工作,也不会实际设置列表的新标题 typedef结构节点{ int-val; 结构节点; }节点; 插入标题(节

让我们看看这段代码:

typedef结构节点{
int-val;
结构节点;
}节点;
插入标头(节点*列表,int val){
node*temp=malloc(sizeof(node));
温度->值;
临时->下一步=列表;
列表=临时;
}
int main(){
节点*list=NULL;
插入(清单5);
}
在这里,如果我尝试调用
列表->val
,它不会像传入列表副本一样工作,也不会实际设置列表的新标题

typedef结构节点{
int-val;
结构节点;
}节点;
插入标题(节点**列表,int val){
node*temp=malloc(sizeof(node));
温度->值;
临时->下一步=*列表;
*列表=临时;
}
int main(){
节点*list=NULL;
插入(&列表,5);
}
我知道这会起作用,但我真正的问题是为什么第一个例子不起作用。我的意思是我将
列表
传递到函数中,
列表
是指向结构的指针。我是C新手,但传入结构的地址以更改其成员并可能重写它,这难道不正确吗。我完全理解,如果我将结构本身与
*list
一起传递,这将不起作用,因为它只会创建一个副本。 但是
节点*列表
不是副本,它是指向实际结构的指针,那么为什么我需要使用指向结构指针的指针来执行此操作呢


我是C的新手,所以不要太难判断。顺便说一句,这将是一个链表。

因为您要修改指针本身,而不是引用值。要修改它,您需要将指针传递到此指针

类似于“正常”类型。如果传递整数,则无法在函数中修改它。要存档,您需要传递指针