为什么我们必须将指针传递给操纵链表的指针?为什么我们不能只传递指针?我只是不理解逻辑上发生的事情的内部。
我认为通过指向列表的指针就足够了,但显然不是。
答案 0 :(得分:1)
这取决于你的链表实现,但是为了论证,如果你已经实现了一个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
变量,而不是调用者。
答案 1 :(得分:0)
在C中,如果要传递可能由函数修改的参数,则将指针传递给包含修改值的变量:
void swap(int *i, int *j) // modifies the two parameter.
现在,如果此参数本身是指针,则必须将指针传递给指针。例如,将单元格插入列表前面的函数插入。如果将列表表示为指向其第一个元素的指针,则必须修改此指针。所以你传递一个指向它的指针:
与
typedef struct cell *list
void insert(list *pl, struct cell *pc)
^^
由于list是指针本身,因此它是指向指针的指针,因为list *
与struct cell **
相同。
答案 2 :(得分:0)