为什么在creatLinkList函数中,第一个参数需要两个 * * 呢?
第一:在main函数中传过来的是一个结构体指针的地址,所以需要用一个 * 来接受地址,第二因为传过来的是结构体指针的地址,所以一次解引用的话是这个指针的地址对应的结构体的地址(也就是说现在得到的还是一个地址,L指向的地址),需要再一次解引用才能得到我们一开始设置结构体的那块地址
#include#include typedef struct Node{ int data; struct Node *next; }Node; typedef struct Node *LinkList; void creatLinkList(LinkList *L,int n){ LinkList p; *L=(LinkList)malloc(sizeof(Node));//这里建立了头节点 (*L)->next=NULL; //这里为什么需要括号呢,是因为->的优先级比取址号(*)高,所以需要括号先解引用 p=*L; int i; for(i=0;i data); p->next=(*L)->next; (*L)->next=p;//这里头节点的指针域指向了p } } void printLinkList(LinkList L){ LinkList p=L->next; //这里指向头节点的next,也就是跳过了头节点 while(p){ printf("%d ",p->data); p=p->next; } } int main(void){ LinkList L=NULL; creatLinkList(&L,5); printLinkList(L); putchar('n'); return 0; }



