在使用这种结构体类型的时候却不用在LinkList前加*号,这是怎么回事?

定义节点如下:
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList; //线性链表类型
创建链表时用以下函数,内容省略。
Status CreateList_L(LinkList *L,int n);
mian函数内容:
LNode *L1;
CreateList_L(&L1,5);

我的问题就是在使用CreateList_L函数创建链表时,它的参数是LInkList *类型的,
为什么不是*LinkList *类型的。
我认为typedef的时候是将整个结点结构体重命名为*LinkList

猛跑小猪
浏览 221回答 2
2回答

慕盖茨4494581

Status CreateList_L(LinkList *L,int n);因为LinkList <=> LNode *,转换一下就明白了,LNode **L,这说明L是一个指向指针的指针。例如:int *p=4;**q; q=&p;其中指针p指向存储4的地址,由于指针也是变量,在内存中也是有存储地址的,指针q则指向指针变量p的存储地址。而是用结构体时是直接是用头指针,所以不需要加*号,这样你应该能明白了吧。

慕哥6287543

这个定义你这么看typedef (struct LNode *) LinkList;意思就是 LinkList 本身就是一个指向struct LNode 指针比方说你定义了一个char * p;它是(char *) p,p是指向char 的指针,你之后用P的时候不会再在它的前面加一个* 吧?
打开App,查看更多内容
随时随地看视频慕课网APP