struct LNode { ElemType data; struct LNode *next; }; typedef struct LNod *Linklist;

建立空链表Status InitList_CL(LinkList *L)
{ /* 操作结果:构造一个空的线性表L */
*L=(LinkList)malloc(sizeof(struct LNode)); /* 产生头结点,并使L指向此头结点 */
if(!*L) /* 存储分配失败 */
exit(OVERFLOW);
(*L)->next=*L; /* 指针域指向头结点 */
return OK;
}
为什么要定义成LinkList *L ,而不是Linklist L 或者是&L

第1个回答  2012-09-02
你说的是参数吧,Linklist L这样传是修改不了传进来的Linklist对象的,如果是Linklist &L是可以的;Linklist L是传值,Linklist *L和Linklist &L分别是指针和引用,只有传指针和引用才在函数体里才可以修改其值的(包括指针,不要被指针给蒙蔽了)
第2个回答  2012-09-02
首先你得明白这样的一个例子:
int temp (int *a)
{
*a = 10;
}

int main(void)
{
int x;
temp(&x);
printf("%d\n", x);
}
这个程序运行后 结果是多少?
在函数参数中, 设为指针类型, 一般都作为传入传出参数。
如果定义成 Linklist L 那么传入的参数 是一个结构体, 如果你的结构体足够大, 那么在程序调用的时候 会浪费很多 栈空间, 程序效率很低。最主要的 是 不能传出 运算结果。
定义成指针 就相对灵活很多, 像链表中 你可以将参数只当成 传入参数处理, 也可以当成 传出参数处理。 比如问题中 传出 malloc 指针。
&L 是错误的 , 没有这样定义的。本回答被提问者和网友采纳
相似回答