我希望有人可以解释为什么我的教授在他给我们的示例代码中放置了一个双指针。 head在main中声明为Node *head
,为什么他将它作为双指针传递?据我所知,如果我放下额外的星星,并且在功能中将所有星星都放在头上,它将完全相同。
由于
void addLast(Node **head, int value)
{
Node *temp;
temp = *head;
Node *var = (Node *)malloc(sizeof (Node));
var->data=value;
if( *head==NULL)
{
*head=var;
(*head)->next=NULL;
}
else
{
while(temp->next!=NULL)
{
temp=temp->next;
}
var->next=NULL;
temp->next=var;
}
}
答案 0 :(得分:3)
C中的参数是按值传递 - 它们是复制的。如果您只是传递单个指针Node *
,则head
参数是传入的指针的副本,这意味着对它的任何修改只对函数是本地的。这意味着操作
head = var
只会覆盖函数的指针副本,而不是修改实际列表(它位于函数外部)。通过将指针传递给头指针(Node **
),您可以通过解除引用参数来修改外部列表。