链表结构体指针问题

int Initlist(Linklist *L)

{

*L=(Linklist)malloc(sizeof(Lnode));

if(!L)

exit (FALSE);

(*L)->next=NULL;

return TRUE;

}

这个是初始化链表的一段程序
为什么要用*L
*L 和&L 的意义各是什么?

其实关键在於这个L应该是Lnode的双重指针,否则就会内存泄漏了。上面的都解释过了。我再提一点,就是形参和实参的关系。
如下调用:
Linklist L1;
Initlist(&L1);
在Initlist里面的形参L并不是实参L1。这是2个不同的指针变量,但是他们都指向同一块内存。所以在Initlist函数里对L指向的内存(既是*L)进行修改,执行完毕退出该函数后(*L1)也就变化了。这就是指针的魅力。如果参数类型不是指针,那么Initlist里面malloc分配的内存就没有被释放的地方啦。
*L就是指针指向的那块内存的地址,你给它赋值,就是修改了那块内存的值。而&L就是取变量L的地址。打比方:L自己的地址是0x0000,而它存放的内容是0x1111,那么&L就是0x0000。而(*L)就是0x1111。
这里,地址为*L的变量应该还是一个指针,L就是指向指针的指针。双重指针,或者也是二级指针。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-28
*L=(Linklist)malloc(sizeof(Lnode));
因为malloc()是返回一块空间的指针,所以以此推断:Linklist应该是一个指针类型。因此:
Linklist *L,就定义了一个二级指针L(指向指针的指针)。*L=(Linklist)malloc(sizeof(Lnode))是把分配的空间地址赋给L所指向的指针。
你再仔细看看,明白了吗?
第2个回答  2009-10-28
*L取得L的地址, &L取得L中的值

如果不使用*L传递的话,在函数返回时会造成内存泄漏,因为*L=(Linklist)malloc(sizeof(Lnode));分配空间后在函数外再无法释放

C语言不具备垃圾自动回收,在堆上分配的空间C语言不会自己把它回收,也就是说如果函数原型是int Initlist(Linklist L)的话,该函数执行组束后就会造成内存泄漏了
第3个回答  2009-10-28
因为不使用指针的话,在函数返回时,分配的空间会被收回
第4个回答  2009-11-12
你给它赋值,就是修改了那块内存的值。而&L就是取变量L的地址。打比方:L自己的地址是0x0000,而它存放的内容是0x111本回答被提问者采纳
相似回答