还是数据结构的指针问题。。。
typedef struct LNode
{
ElemType data;
struct Node *next;
}LNode,*LinkList;
LinkList L与LinkList *L的问题:
由结构体的定义可知,LinkList 是个指向结构体的指针。而LinkList L,就是定义一个和LinkList一个类型的指针,和LinkList一样,均是指向结构体LNode.
然后,LinkList *L,就是定义一个指向结构体LNode的指针LinkList 的指针,说白了就是指向LinkList 的指针,这个上次总结说过。我以为弄清楚了这个问题,但实际敲了发觉还是不懂,又看了些资料,请教了些,所以再次总结这个问题。函数的传递,如果需要改动原来的值并返回,那么得借助指针,也就是通常说的一级指针。而在链表的操作中,有些操作是却是改变了指针的指向。比如初始化操作,
status InitList (LinkList *L)
{
*L=(LinkList)malloc(sizeof(LNode));
(*L)->next=NULL;
}
原来指针没指向这个链表的,根本不知道的,但是这个操作后,指针指向了这个结构体LNode,也就是说改变了指针的指向。那么和改变值一个道理,指针也是一个地址值。要改变这个地址值,还得再借助指针,也就是二级指针了。而*L,也就是取出二级指针L所指向的值对吧,其实也就是一级指针了,指向LNode.所以初始化中,*L=(LinkList)malloc(sizeof(LNode)),也就是让*L指向结构体所强制转化成的,大小为LNode,首地址为LinkList的结构体。换言之,也就是把这个结构体的首地址复制给*L。像这样,销毁操作也是要用LinkList *L.
再分不清我就真的是。。。。。。

浙公网安备 33010602011771号