表示链表节点的结构:
typedef struct node{
int val;
struct node *next;
} node_t;
和我们名单的负责人:
node_t *head;
现在,我想构建一个函数来创建列表中的第一个元素,当然这将由* head指向。在我的观点中,我将以函数的正确版本开始,我使用指向头部的指针,即双指针:
void createFirstElement(node_t **head, int value){
*head=NULL;
*head=malloc(sizeof(node_t));
(*head)->val=value;
(*head)->next=NULL;
}
当我使用该版本的createFirstElement时,我得到了打印节点的值。但是我对我的第一个版本的createFirstElement有一个问题,它没有用:
void createFirstElement(node_t *head, int value){
head=NULL;
head=malloc(sizeof(node_t));
head->val=value;
head->next=NULL;
}
这个版本与双指针的版本有什么不同?我仍然在参数中获取头指针(而不是指向头部的指针)并在内部进行所有更改。
提前感谢大家!
答案 0 :(得分:3)
C使用“按值调用”,因此在第二个版本中,您使用的是node_t *head
的副本。函数返回时,传递给函数的head
保持不变。