有人可以帮我理解为什么在new()调用后指针头没有更新?
预期:val:0#调用new(),将l0.val更新为0 actual:val:253784#为什么更新l0.val不会被指针更新
https://www.edaplayground.com/x/54Nz
#include <stdio.h>
#include <stdlib.h>
typedef struct _node {
int val;
struct _node *next;
} node;
//construct the struct
void new(node *head) {
//malloc return a pointer, type casting to (node*)
node *head_l = (node*)malloc(sizeof(node));
if(!head_l) {
printf("Create Fail!\n");
exit(1);
}
head_l->val = 0;
head_l->next = NULL;
printf("head_l->val:%0d\n",head_l->val);
//why head = head_l doesn't work??
head = head_l;
//The line below works
//*head = *head_l;
}
int main() {
node l0;
new(&l0);
printf("val:%0d\n",l0.val);
}
答案 0 :(得分:0)
函数参数仅接收它们传递的值,而不接收参数的任何引用或其他连接。调用该函数时,参数head
设置为指向l0
的指针的值。更改head
不会更改l0
。
答案 1 :(得分:0)
通过参考帖子 - Having a function change the value a pointer represents in C,我找到了根本原因。
我们说 head 的地址是[0x0000_0010] - &gt;节点对象为NULL。
head_l 的地址为[0x0003_DF58] - &gt; node.val = 0的节点对象。
head = head_l;仅将 head 从0x0000_0010修改为0x0003_DF58。
* head = * head_l;修改[0x0000_0010] - 头点的值,到[0x0003_DF58] - head_l的值。
后者将目标值(NULL)更改为新值(node.val = 0)。