C语言中的malloc()函数
有人能解释一下吗C语言中的malloc()函数,c,malloc,C,Malloc,有人能解释一下吗 struct node { int data; struct node * link; } main() { struct node *p, *list, *temp; list = p = temp = NULL; ......................... ......................... } addbeg() { int x; temp=malloc(si
struct node
{
int data;
struct node * link;
}
main()
{
struct node *p, *list, *temp;
list = p = temp = NULL;
.........................
.........................
}
addbeg()
{
int x;
temp=malloc(sizeof(struct node));
scanf("%d", &x);
temp->data=x;
temp->link = list;
list=temp;
}
这是一个通过C语言在链表中输入数据的代码。代码还不完整,但我认为这就足够了。请解释这些行的编码:
temp=malloc(sizeof(struct node));
及
malloc为新节点分配空间
temp->link = list
及
使新节点成为列表的标题。第一行:为列表中的单个附加节点分配内存 第二行:将当前列表作为此元素后的续行附加 第三行:将当前元素作为列表的开头。malloc用于分配内存——在本例中,分配给新节点
temp->link = list
代码中定义的addbeg函数执行以下操作:
定义一个临时变量x。
为新节点分配空间。
向scanf输入整数%d代码并将其存储在x中。
将保存到x的值存储在新分配节点的数据字段中。
将变量“list”指向的列表的旧头作为链接存储在新分配的节点中。
将新节点设置为存储在变量“list”中的列表的新头。
这是一个非常基本的整数链表实现。temp和list在addbeg中不可见,因为它们在main中声明。它们要么需要传递给addbeg,要么需要在主要的global之外声明,恶心 您可以添加一个有用的注意事项,即代码最终应确保每个分配的内存都是免费的,并抱怨“内存泄漏”和“对小型学习程序没有多大影响,但对大型长期运行的程序有影响”,因此,您也可以学习如何在小型学习程序上正确地执行此操作。不过,他的程序无论如何都不会工作,除非将list和temp传递给addbeg,或者addbeg是在main中定义的。在标准C中,addbeg不能在main中定义。有些编译器允许它作为扩展,但它不是有效的C。首先,代码没有完成,也许我们可以将temp和list传递给addbeg,或者我应该在main之外声明temp和list作为全局变量,但是我从一本书中选择了这段代码,因为我不理解它。非常感谢您的回复。
list = temp