将表示链接列表节点的结构:
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;
}
这个版本与双指针有什么不同?我仍然在参数中获取头指针(而不是指向头部的指针)并在内部进行所有更改 .
提前谢谢大家!
1 回答
C使用"call by value",因此在第二个版本中,您使用的是
node_t *head
的副本 . 函数返回时,传递给函数的head
保持不变 .