笔者学东西是有过这样的疑惑 为什么此处 List_HeadInsert(LinkList &L)的参数非要&L,而不是直接传入L为此做出以下猜想:
猜想:传入的地址与传出的地址会变化导致必须使用指针引用
验证猜想:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
LinkList Create_Link(LinkList &L){
LNode *s;
int x;
printf("forward_creat %p\n",L);
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=5){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
printf("backward_creat %p\n",L);
return L;
}
int main(){
LinkList L;
printf("forward %p\n",L);
Create_Link(L);
printf("backward %p\n",L);
free(L);
}
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
LinkList Create_Link(LinkList L){
LNode *s;
int x;
printf("forward_creat %p\n",L);
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=5){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
printf("backward_creat %p\n",L);
return L;
}
int main(){
LinkList L;
printf("forward %p\n",L);
Create_Link(L);
printf("backward %p\n",L);
free(L);
}
得出结论:结构体指针L在malloc分配空间后地址会发生变化,加上&符号会使函数返回指针L的地址 与 函数内部变化后的地址 保持一致,这样就不用重复为指针赋值。