C 向函数传递双指针和指针时出现分段错误

C 向函数传递双指针和指针时出现分段错误,c,pointers,singly-linked-list,C,Pointers,Singly Linked List,当我这样做时: t_node *node1; t_node **head; void *elem; int c = 1; elem = &c; head = NULL; node1 = malloc(sizeof(t_node)); node1->elem = elem; head = &node1; //add_node(node1,head); //substitute this with line above and it doesn't work printf("

当我这样做时:

t_node *node1;
t_node **head;
void *elem;
int c = 1;

elem = &c;
head = NULL;
node1 = malloc(sizeof(t_node));
node1->elem = elem;
head = &node1;
//add_node(node1,head); //substitute this with line above and it doesn't work
printf("%d\n",*(int*)(*head)->elem); // prints 1 and works fine
但是当我创建一个名为ADD_NODE的函数时,它不起作用

void add_node(t_node *node1, t_node **head){
   head = &node1;
}
这对我来说没有任何意义。。。为什么这会导致这不起作用?调用该函数实际上执行相同的代码


编辑:请记住,add_节点的签名没有问题。我需要签名

C是一种传递值语言。就main而言,函数实际上什么都不做


查看comp.lang.c常见问题解答。

c是一种传递值语言。就main而言,函数实际上什么都不做


查看comp.lang.c常见问题解答。

中的'c'变量是通过引用传递的,因此要更改函数调用中的值,应将指针传递给变量

正确的步骤是——

无效添加节点**节点1,节点***头{ *头=节点1;
}

在“C”中,变量是通过引用传递的,所以要更改函数调用中的值,应该将指针传递给变量

正确的步骤是——

无效添加节点**节点1,节点***头{ *头=节点1;
}

在对函数的调用中,参数的作用域仅限于该函数,因此您对'head=&node1'的赋值对函数外部的变量没有影响

要影响传入的变量,必须传递变量的地址。例如:

void add_node(t_node **node1, t_node ***head){
   *head = node1;
}
电话是:

add_node(&node1, &head);

请注意,必须取消对函数中“head”指针的引用,以便“head”处的值将用“node1”值更新

在对函数的调用中,参数的作用域仅限于该函数,因此您对'head=&node1'的赋值对函数外的变量没有影响

要影响传入的变量,必须传递变量的地址。例如:

void add_node(t_node **node1, t_node ***head){
   *head = node1;
}
电话是:

add_node(&node1, &head);
请注意,必须取消对函数中“head”指针的引用,以便“head”处的值将用“node1”值更新