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
}
此代码不起作用;发生的错误不是语法错误。
C 中的参数是按值传递的,而不是按引用传递的,也就是说,形式参数只是实际参数的副本。也许你可以理解为什么以下函数不起作用:
void negate(int num)
{
num = -num; // Doesn't work
}
发布的代码不起作用的原因很简单。 head = newnode;
仅更改形式参数head
的值。push()
返回后,来自调用方的实际参数的值保持不变。因此,对于调用方,什么都不会发生(期望内存块被malloc()
ed,但不是free()
ed(。
要更改变量的值,必须将其地址传递给函数:
void push(struct node **head,int data)
{
struct node* newnode = malloc(sizeof(struct node));
newnode->data = data;
newnode->next = head;
*head = newnode;
}
另请参阅:如何修改已传递到 C 函数中的指针?