思路
这个函数的功能在于在将一个地址赋值给指针L
从而L能指向新的头结点Node(头结点建立完成)
然后将头指针的next指向空
表示这是一个空的单链表(建立一个空的单链表完成)
代码
InitList (Linklist *L)
{
*L=(Linklist)malloc(sizeof(Node)); //建立头节点
(*L)->next=NULL; //单链表L为空
}
要点
为什么在代码中形参要使用*L,并且在代码实现中也要使用*L而不是L
要将一个地址赋值给指针L,从而L能指向新的头结点Node
那么我们要既然要改变L的值
就最好通过形参传址,使得形参和实参共用一个地址
这样函数中若形参的值改变,实参也会改变,间接实现数据的双向传递
所以在形参中要使用*L
(注意此时的L为指针的指针,二级指针)
而既然形参为*L
那么在代码实现中为了让接收新地址的L变量类型也为地址
就要通过运算符*的使用取二级指针*L内容为L
(所以在代码实现中所有的*L实际都相当于L)
代码解释
*L=(Linklist)malloc(sizeof(Node));
- sizeof():计算变量所占的空间
- malloc():分配空间
- (Linklist):将malloc分配的那个空间地址保存在Linklist中
意思即为计算结构体类型Node需要的空间后,为它分配一个空间,并将所分配的空间地址保存在*L(实际为L)中
这样下来,让指针L指向头结点Node的地址
也等同于让赋值了头结点的地址的头指针L成功指向头结点
建立头结点的动作完成
网友评论