第3章 引用
本章学习要点
深入掌握引用的相关概念和使用方法。
深入掌握常引用的相关概念和使用方法。
灵活运用引用的相关知识进行综合程序设计。
3.1 基本知识点
3.1.1 引用的概念
引用是一个别名。当建立引用时,程序用另一个已定义的变量或对象(目标)的名字初始化它。从那时起,引用作为目标的别名而使用,对引用的改动实际上就是对目标的改动。
建立引用的一般格式如下:
- 数据类型 & 引用名=已定义的变量名;
例如,以下语句说明rd是对double型数的引用,初始化为引用d:
- double d;
- double &rd=d;
引用具有如下特点:
引用能够使用任何合法变量名。
引用不是变量,引用必须初始化。
引用不是值,不占存储空间。声明引用时,目标的存储状态不会改变。所以引用只有声明,没有定义。
引用只有在声明时带有"&",以后就像普通变量一样使用,不能再带"&"。
引用主要用作函数参数。
例如,有以下程序:
- #include <iostream.h>
- void main()
- { int n=100;
- int &rn=n;
- n++;
- cout << "n=" << n << endl;
- cout << "rn=" << rn << endl;
- rn++;
- cout << "n=" << n << endl;
- cout << "rn=" << rn << endl;
- }
该程序中说明rn是n的引用,因此,rn和n的值完全同步操作,其执行结果如下:
- n=101
- rn=101
- n=102
- rn=102
由于指针也是变量,所以也可以引用指针变量。其使用格式如下:
- 数据类型 * &指针引用名=指针
同样,先要定义"指针",它是基类型为"数据类型"的指针变量。例如,有以下程序:
- #include <iostream.h>
- void main()
- { int n=10,*pn=&n,*&rn=pn;
- (*pn)++;
- cout << "n=" << n << endl;
- (*rn)++;
- cout << "n=" << n << endl;
- }
该程序中,指针pn指向n,rn是pn的引用,执行(*pn)++;使n值增1,同样,执行(*rn)++;使n值增1。其执行结果如下:
- n=11
- n=12
并不是对任何类型的数据都可以引用,在下列情况下不能进行引用:
对void进行引用是不允许的。
不能建立引用的数组。
没有引用的引用。
引用不能用类型来初始化,例如,int &rn=int;是错误的。
没有空引用(空引用没有任何意义)。