请问一个关于链表创建函数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 20:20:05
如下的链表创建函数:
struct node
{
int data1;
node*next;
};

node* create()
{
node *p1;
node *p2;
node *head;
int a;
head=0;
cout<<"产生一条无序链表,请输入数据,以-1结束:";
while(1)
{
cin>>a;
if(a==-1)break;
p1=new node;
p1->data1=a;
if(head==0)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
}
if(head)p2->next=0;
return head;
}
我的疑问是:head是一个局部变量,但却作为返回值了,为什么以后引用这个返回值没有任何问题,它不是应该在函数调用结束后就脱离生命期了吗?

return haed的运行机理是生成一个node *类型的临时变量,让其值等于head,然后返回这个临时变量.因此,虽然head被销毁了,但它的值被这个临时变量保存了下来.

这个机理当你学C++时,可以用类的构造函数来验证.

楼主用的是指针不是变量,这两者有很大区别!指针是在内存中分配空间,程序访问时会直接访问内存,只要内存未被重写,值就不会改变。
这也是C与JAVA的最大区别,是用指针与用类实现的不同,JAVA的类会自动分配内存并自动回收,但C指针不会,想回收空间必需手动释放。想了解当中的区别最好读一读概念,概念写得很清楚,只是不好理解。