在C语言中操作链表



为什么要传递一个指针给另一个指针来操作链表?为什么我们不能直接传递指针呢?我只是不明白发生的事情的内在逻辑。

我认为传递到列表的指针就足够了,但显然不是。

这取决于您的链表实现,但是为了便于讨论,如果您已经实现了一个push函数,如下所示:

typedef struct linked_list linked_list;
struct linked_list
{
    int value;
    linked_list *next;
};
void push(linked_list **head, int value)
{
    linked_list *temp = *head;
    *head = malloc(sizeof(linked_list));
    (*head)->value = value;
    (*head)->next = temp;
}

则指向指针的指针是必要的,否则,您将修改push的本地head变量,而不是调用者的。

在C语言中,如果你想传递一个可能被函数修改的参数,你可以传递一个指向包含修改值的变量的指针:

 void swap(int *i, int *j) // modifies the two parameter.

现在,如果这个形参本身是指针,你必须传递一个指针给另一个指针。以insert函数为例,它在列表前面插入一个单元格。如果将列表表示为指向其第一个元素的指针,则必须修改该指针。所以你给它传递一个指针:

typedef struct cell *list
void insert(list *pl, struct cell *pc)
                  ^^

由于list本身是一个指针,因此它是指向指针的指针,因为list *struct cell **相同。

没有一行的答案

看一下第12页(push())在此文档中:http://cslibrary.stanford.edu/103/LinkedListBasics.pdf

对我来说是最好的解释。

相关内容

  • 没有找到相关文章

最新更新