c中说局部变量分为auto和static ,auto变量在动态存储区中分配空间,函数调用结束后空间回收。

比如定义了一个结构体 struct stu
{
int num;
struct stu *next;
}
struct stu* create(int n)
{
struct stu *head,*p,*back;
/ 创建若干个节点的链表
return head;
}
main()
{
struct stu *p=create(3);
接着输出在函数中创建的链表
}
struct类型的变量不是auto类型的吗,若按照局部变量理解,main中调用完create后,在函数中创建的链表应该也回收空间了,为何还能在main中打印出来呢??

啥动态呀,,动态是malloc出来的内存

head已经返回出来了 head的值是可以得到的, 看好 是head的值 是*head的值
create函数返回的是一个指针,,,,那么可以根据head来找到下一个结点 接着再找下一个,这是链表的特点。。。

你这里问的主要是在主函数里面怎么能打印出来,那么我告诉你,在create里面 一定调用了malloc函数来从堆里面动态分配出来的内存保存数据,,,
如果不是那不可能打印的,,,,

struct stu* create(int n)
{
struct stu *head,*p,*back;
/ 创建若干个节点的链表
return head;
}
这个地方如果是这样
struct stu* create(int n)
{
struct stu *head,p,back;//没有那些* 也不用malloc分配内存的话 在这个函数运行完了之后 p和back都被释放掉了 也就打印不出来了。。。
/ 创建若干个节点的链表
return head;
}追问

刚看了点资料,关键点是我用malloc为节点分配了空间,是在堆上得,除非我用free释放掉,否则直到整个程序结束,这段空间还是存在的。但是struct *head呢,指针变量head还是在动态存储区分配的空间吧,只是它的值被return回来了,所以在main中可以找到create的链表。是这个意思吧,大侠?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-16
C里面 给链表里面的节点赋值之前都需要用函数malloc声请空间的 不然会报错。 既然用malloc声请了空间 那么该链表里面的所有节点就是static的类型了
相似回答