《Thinking in C++》中解释:
引用(&)像是一个能编译器逆向引用的常量型指针。通常用于函数的参
数表中和函数的返回值,也可以独立使用。例如:
int x;
int &r = x;
当创建一个引用时,引用必须被初始化指向一个存在的对象,但也可以:
int &q = 12;
这里,编译器分派了一个存储单元,它的初值初始化为12。引用必须和存储单元联
系,访问引用时,就是访问那个存储单元。如:
int x = 0;
int &a = x;
a++;
事实上就是增加x。考虑引用最简单的方法是把它当作是一个奇特的指针,这个指
针的优点是不必怀疑它是否被初始化了(编译器强迫它初始化),也不必知道怎么样
对他逆向引用(这由编译器做)。
使用引用时有一定的规则:
■ 当引用被创建时,必须初始化。(指针则可以在任何时候被初始化)
■ 一旦一个引用被初始化为指向一个对象,它就不能被改变为对另一个对象的引
用。(指针可以在任何时候指向另一个对象)
■ 不可能有NULL应用,必须保证引用和一块合法的存储单元关联。
函数中的引用:
最常看见的引用的地方是函数参数和返回值中,当引用被用做函数参数时,函数内任何对该引用的改变将对函数外的参数改变。如果函数中返回一个引用,必须象从函数种返回一个指针一样对待。
指针引用:
在C语言中,如果想改变指针本身而不是它所指向的内容,函数声明可能像这样:
void fun(int**);
传递它时,必须是指针的地址:
int l = 47;
int *p = &l;
fun(&p);
对于C++中的引用,语法清晰多了,函数参数变成指针的引用,用不着取得指针的地址。
#include <iostream.h>
void increment(int*& i) { i++;}
main()
{
int *i = 0;
cout<<“i=”<< i << endl;
increment(i);
cout<<“i=”<< i << endl;
}