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)这样的。 展开
void InitList(SqList * &L)
{ L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
void InitList(SqList * &L)这样定义我第一次看到,怎么理解呀?是不是笔误呀?书里
CreateList、DestroyList都是这样定义的参数,见过指针的指针,真的好像第一次见到
void InitList(SqList * &L)这样的。 展开
3个回答
展开全部
这是指针的引用,你可以把这里的 SqList * 看做一个类型, 然后加个引用就清楚了.
在调用的地方这么调用
SqList * P =NULL;
InitList(P);
之后P就被分配空间.此时查看P的值不再是NULL
如果InitList声明为
void InitList(SqList * L)
{
....
}
那么,调用的地方如果还是这么调用的话.
SqList * P =NULL;
InitList(P);
此时P没有发生变化, 还是NULL. ,因为是值传递的.
在调用的地方这么调用
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);
好像没人这么用?
展开全部
这不是笔误。
&表示引用。如果不加&L的话,对L的赋值操作是不会被保存的。这跟函数的形参一样。进入函数时,参数送到EDX寄存器保存,退出函数时,取出EDX的内容恢复。
简单的说:如果不加&的话,对L的赋值操作不会生效。
&表示引用。如果不加&L的话,对L的赋值操作是不会被保存的。这跟函数的形参一样。进入函数时,参数送到EDX寄存器保存,退出函数时,取出EDX的内容恢复。
简单的说:如果不加&的话,对L的赋值操作不会生效。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在函数定义中*&的意思是将后面那个变量或指针的地址传递到函数中。没有语法错误的 。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询