双指针作为函数参数

时间:2013-01-15 16:38:41

标签: c pointers

我遇到了很多链表函数和C函数,它们打算传递双指针代替单个指向函数的指针。例如,这个函数用于链表中的排序插入:

    void sortedinsert(struct node **headref,struct node *newnode)
    {
           while(*headref!=NULL&&(*headref)->data<newnode->data)
                   headref=&((*headref)->next);
           newnode->next=headref;
           *headref=newnode;
    }

请解释一下使用双指针作为函数参数来代替单指针,以及如何轻松地为链表创建函数?

3 个答案:

答案 0 :(得分:2)

这个“双指针”是指向指针的指针。它允许调用者的指针副本在更新列表的头项时由sortedinsert函数更新。

*headref=newnode;更新调用者的指针以指向newnode。 (顺便说一句,我认为代码是有问题的。看起来headref始终设置为newnode,无论插入的列表位置newnode如何。)

请注意,在这种情况下,您可以避免使用指向指针的指针,方法是更改​​函数以返回指向列表头部的指针。

答案 1 :(得分:0)

sortedinsert函数接受指向列表头部的指针和指向新节点的指针。

列表的头部只是一个指针,但是在这个函数中是一个“指向指针的指针”,因为该函数正在改变列表头部的位置。

新节点将添加到列表中的排序位置,并且磁头似乎始终被修改为指向最新节点。

答案 2 :(得分:0)

请注意,如果您使用的是C ++,则可以通过引用传递headref,因此相同的代码会更简单。它完全相同,但更简单:

    void sortedinsert(struct node* &headref,struct node *newnode)
    {
           while(headref!=NULL && headref->data < newnode->data)
                   headref = headref->next;
           newnode->next = headref;
           headref = newnode;
    }
相关问题