C:链接的LIst和指向指针的指针

时间:2016-02-11 11:47:42

标签: c pointers linked-list

表示链表节点的结构:

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 个答案:

答案 0 :(得分:3)

C使用“按值调用”,因此在第二个版本中,您使用的是node_t *head的副本。函数返回时,传递给函数的head保持不变。