gpt4 book ai didi

c - C语言动态内存链表语法错误

转载 作者:行者123 更新时间:2023-11-30 19:39:37 25 4
gpt4 key购买 nike

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;
}

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

关于c - C语言动态内存链表语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36295528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com