initlist(sqlist*&L)中的*&L是引用。c++中的概念,int a;int &b=a;这就声明了b是a的引用,经过这样的声明后使用a或b的作用相同,都代表同一变量。对变量声明一个引用,并不另开辟内存单元。
函数参数传递有两种情况,有一般的将变量名作为参数,这时传递给形参的是变量的值,在执行函数的时候,形参的值发生的变化并不传递给实参。
传递变量的指针,使形参得到一个变量的地址,这时形参指针变量指向实参变量单元。引进引用后,函数参数的第三种传递方式就是传送变量的别名。
例如:
void initList(SqList *&L)
{
L=(SqList *)malloc(sizeof(SqList));
L-> length=0;
}
SqList *L = NULL;
initList(L);
L->...//进行对L的某些操作,那么你的程序运行良好
在形参表中以符号“&”开始的参数即为引用参数。如果一个形参是引用参数,调用部位将把实参的地址传递给子程序。子程序可以改变传递给引用参数的任何实参,因为子程序操作的是真正的变量,而不是它的副本。
把参数声明成引用,实际上改变了缺省的按值传递参数的传递机制,在按值传递时,函数操纵的是实参的本地拷贝。
引用参数的三种常见用法:
1、需要改变实参的值,比如swap()。参数是引用时,函数接收的是实参的左值而不是值的拷贝。这意味着函数知道实参在内存中的位置,因而能够改变它的值或取它的地址。
2、向主调函数返回额外的结果。
3、向函数传递大型的类对象。
参考资料来源:百度百科—引用参数
参考资料来源:百度百科—参数传递
(SqList &L) 就是参数类型为SqList类型的引用;
为什么要用引用,因为用引用传参可以在函数内部更改L的数据,不然传入函数的只是L的一个副本,更改后对原L没有影响。