首页 > 代码库 > [C++程序设计]引用

[C++程序设计]引用

对一个数据可以使用“引用”(reference),这是C++对C的一个重要扩充,引用是一种新的变量类型,它的作用是为一个变量起一个别名。假如有一个变量a,想给它起一个别名b,可以这样写:
int a; //定义a是整型变量
int &b=a; //声明b是a的引用

注意: 在上述声明中,&是引用声明符,并不代表地址。不要理解为“把a的值赋给b的地址”。声明变量b为引用类型,并不需要另外开辟内存单元来存 放b的值。b和a占内存中的同一个存储单元,它们 具有同一地址。声明b是a的引用,可以理解为: 使变量b具有变量a的地址。如果a的值是20,则b的值也是20。

在声明一个引用类型变量时,必须同时使之初始化,即声明它代表哪一个变量。在声明变量b是变量a的引用后,在它们所在函数执行期间,该引用类型变量b始终与其代表的变量a相联系,不能再作为其他变量的引用(别名)。下面的用法不对:
int a1,a2;
int &b=a1;

这种传递方式和使用指针变量作形参时有何不同:
(1)使用引用类型就不必在swap函数中声明形参是指针变量。指针变量要另外开辟内存单元,其内容是地址。而引用变量不是一个独立的变量,不单独占内存单元,在例6.20中引用变量a和b的值的数据类型与实参相同,都是整型。

 

引用作为函数参数

有了变量名,为什么还需要一个别名呢?C++之所以增加引用类型, 主要是把它作为函数参数,以 扩充函数传递数据的功能。

 1 #include <iostream> 2 using namespace std; 3  4 int main() 5 { 6     void sort(int &, int &, int &); 7     int i, j, k; 8     cin >> i >> j >> k; 9     sort(i, j, k);10     cout << i << " " << j << " " << k << endl;11     return 0;12 }13 14 void sort(int &i, int &j, int &k)15 {16     void change(int &a, int &b);17     if(i > j) change(i, j);18     if(i > k) change(i, k);19     if(j > k) change(j, k);    20 }21 22 void change(int &a, int &b)23 {24     int tmp;25     tmp = a;26     a = b;27     b = tmp;28 }