突然发现个数据结构迷糊的问题,有点晕
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList; /* 定义LinkList */
/* 初始化顺序线性表 */
Status InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */
if(!(*L)) /* 存储分配失败 */
return ERROR;
(*L)->next=NULL; /* 指针域为空 */
return OK;
}
int main()
{
LinkList L;
ElemType e;
Status i;
int j,k;
i=InitList(&L);
printf("初始化L后:ListLength(L)=%d\n",ListLength(L));
}知道了LinkList 是指向数据结点的指针,然后在初始化中&L什么意思,初始化函数中形参LinkList *L是不是理解成二级指针Status InitList(struct Node **L),请高手帮忙,晕啦!
[解决办法]
我是这样理解的,
1.函数定义时形参是指向指针的指针 Status InitList(LinkList *L)
2.为什么要用指向指针的指针?
大家都知道,使用指针可以做到对形参数据的修改影响实参数据,其实质是复制了指针的值,使形参指针和实参指针指向同一区域.大家可以做一个实验,在函数内部直接修改形参指针的值,最后会发现实参指针的值不会变.
如果不用指向指针的指针,用LinkList L做形参,要把分配的地址传出来,不能用下面的语句L=(LinkList)malloc(sizeof(Node)),只能将分配的内存地址放到L->next,通过L->next将分配的内存空间带出来.