C语言中动态内存中链表的语法错误

时间:2016-03-29 21:34:50

标签: c dynamic malloc

void push(struct node* head,int data)
{
    struct node* newnode=(struct node*)malloc(sizeof(struct node)); 
    newnode->data=data;
    newnode->next=head;
    head=newnode; //it doesnt work
}

此代码无效;发生的错误不是语法错误。

1 个答案:

答案 0 :(得分:0)

C中的参数通过值传递,而不是通过引用传递,也就是说,形式参数只是实际参数的副本。也许你可以理解为什么以下功能不起作用:

void negate(int num)
{
    num = -num; // Doesn't work
}

发布的代码无法正常工作的原因与此类似。 head = newnode;仅更改形式参数head的值。在push()返回后,来自调用者的实际参数的值保持不变。因此,对于调用者来说,没有任何反应(期望一块内存被malloc()编辑但不是free()

要更改变量的值,必须将其地址传递给函数:

void push(struct node **head,int data)
{
    struct node* newnode = malloc(sizeof(struct node)); 
    newnode->data = data;
    newnode->next = head;
    *head = newnode;
}

另请参阅:How do I modify a pointer that has been passed into a function in C?