C和C++的指针或地址?void InitList(SqList * &L)?

李春葆的数据结构教程,初始化线性表是这样定义的:voidInitList(SqList*&L){L=(SqList*)malloc(sizeof(SqList));L->... 李春葆的数据结构教程,初始化线性表是这样定义的:
void InitList(SqList * &L)
{ L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
void InitList(SqList * &L)这样定义我第一次看到,怎么理解呀?是不是笔误呀?书里
CreateList、DestroyList都是这样定义的参数,见过指针的指针,真的好像第一次见到
void InitList(SqList * &L)这样的。
展开
 我来答
文库地摊
2012-07-07 · TA获得超过1196个赞
知道小有建树答主
回答量:663
采纳率:100%
帮助的人:409万
展开全部
这是指针的引用,你可以把这里的 SqList * 看做一个类型, 然后加个引用就清楚了.
在调用的地方这么调用
SqList * P =NULL;
InitList(P);
之后P就被分配空间.此时查看P的值不再是NULL

如果InitList声明为
void InitList(SqList * L)
{
....
}

那么,调用的地方如果还是这么调用的话.

SqList * P =NULL;
InitList(P);

此时P没有发生变化, 还是NULL. ,因为是值传递的.
追问
明白了!如果这样可以吗?
void InitList(SqList **L)
{ *L=(SqList *)malloc(sizeof(SqList));
*L->length=0; //要不要加括号?
}
SqList * P =NULL;
InitList(&P);
好像没人这么用?
saloyun
2012-07-07 · TA获得超过342个赞
知道小有建树答主
回答量:812
采纳率:0%
帮助的人:364万
展开全部
这不是笔误。
&表示引用。如果不加&L的话,对L的赋值操作是不会被保存的。这跟函数的形参一样。进入函数时,参数送到EDX寄存器保存,退出函数时,取出EDX的内容恢复。

简单的说:如果不加&的话,对L的赋值操作不会生效。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaot1021
2012-07-07 · TA获得超过326个赞
知道小有建树答主
回答量:274
采纳率:0%
帮助的人:235万
展开全部
在函数定义中*&的意思是将后面那个变量或指针的地址传递到函数中。没有语法错误的 。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式