为什么在creatLinkList函数中,第一个参数需要两个 * * 呢?
第一:在main函数中传过来的是一个结构体指针的地址,所以需要用一个 * 来接受地址,第二因为传过来的是结构体指针的地址,所以一次解引用的话是这个指针的地址对应的结构体的地址(也就是说现在得到的还是一个地址,L指向的地址),需要再一次解引用才能得到我们一开始设置结构体的那块地址
#include <stdio.h>
#include <stdlib.h>
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<n;i++){
p=(LinkList)malloc(sizeof(Node));
scanf("%d",&p->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;
}