引用调用是函数传递参数的一种方式,使用引用调用,可以在子函数中对形参所做的更改对主函数中的实参有效。
引用可以看成是一种特殊类型的变量可以被认为是另一个变量的别名,就好比人的绰号一样,虽然名字不同,
但所指向的人是一样的,所以引用还与指针有类似的地方。
举例如下:
别名:
int i,j;
int &ri=i; //建立一个int型的引用ri,并将其初始化为变量i的一个别名
j=10;
ri=j; //相当于i=j;
集合运算:
//使用线性表实现集合运算(A-B)U(B-A),即找出两个集合中所有不同元素
void Difference(LinkList<char>& la, LinkList<char>& lb) {
int i, lblen;
lblen = lb.Length();
//逐一读入B表数据到A表查找,若存在则从A表删除,否则,插入到A表
for (i = 1; i <= lblen; i++)
{
char e;
lb.GetElem(e, i);//单链表中取值效率较顺序表低,o(n)
int k = la.LocateElem(e);
if (k)
la.Delete(e, k);//o(1)
else
la.Append(e);//尾插,o(1)
}
}
需要注意的是:
- 声明一个引用时,必须同时对它进行初始化,使它指向一个已经存在的对象。
- 一旦一个引用被初始化后,就不能改为指向其它对象(也就是说,一个引用从它诞生之时起,就必须确定是哪个变量的别名,而且始终只能作为这个变量的别名不能另作他用)
- 引用也可以作为形参,作为形参时候,情况稍有不同,这是因为,形参的初始化不在类型说明时候进行,而是在执行主调函数的调用表达式时 ,才为形参分配内存空间,同时用实参来初始化形参。这样引用类型的形参就通过形实结合,成为实参的一个别名,对形参的任何操作也就会直接作用于实参。