绝了,今天异想天开,不用malloc动态申请内存,而用局部变量声明的方法去创建链表。让我这个刚学习链表的人搞懂了为什么要动态申请内存。
左图
代码:
#include<stdio.h>
#include<windows.h>
struct Node{
char name[20];
float score;
Node* next;
};
int main()
{
Node t;
t.next=NULL;
Node*head=&t;
for(int i=0;i<20;++i)
{
Node p;
p.score=i;
p.next=head;
head=&p;
printf("in1>>%f\n",head->score);
printf("in2>>%f\n",head->next->score);
Sleep(100);
}
while(head!=NULL)
{
printf("out>>%f\n",head->score);
head=head->next;
Sleep(500);
}
return 0;
}
这是用局部变量来做的链表,我们知道,局部变量仅在域内生存,一旦脱离域,内存就会被系统释放。所以在创建完链表之后,局部变量的内存都被释放了。存进去的值没有被保存。
右图:
#include<stdio.h>
#include<windows.h>
struct Node{
char name[20];
float score;
Node* next;
};
int main()
{
Node*head=(Node*)malloc(sizeof(Node));
head->score=-1;
head->next=NULL;
for(int i=0;i<20;++i)
{
printf("in>>%f\n",(head->score));
Sleep(100);
Node *p=(Node*)malloc(sizeof(Node));
p->score=i;
p->next=head;
head=p;
}
while(head->next!=NULL)
{
printf("cout>>%f\n",head->score);
head=head->next;
Sleep(500);
}
return 0;
}
这是动态申请内存做的链表,malloc申请的内存你不用free来释放它,它就不会自动被系统释放。所以链表中的值被保存了下来。
总结
创建链表一定要用malloc动态创建每一个节点,而不能用局部变量。
萌新撰写,如有不妥请指出。