首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

突然发现个数据结构迷糊的有关问题,有点晕

2012-09-22 
突然发现个数据结构迷糊的问题,有点晕typedef struct Node{ElemType datastruct Node *next}Nodetypede

突然发现个数据结构迷糊的问题,有点晕
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将分配的内存空间带出来.

热点排行