一.概念
引用是变量的别名,对引用的操作与对变量的操作完全一样。引用符号&与C语言中取地址符号一样,含义不同。
引用的方法:类型标识符 &引用名 = 变量名
例如:
<strong>int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名</strong>
1.引用作为函数参数
void swap(int &p1, int &p2) //此处函数的形参p1, p2都是引用
{
int p;
p=p1;
p1=p2;
p2=p;
}
//为在程序中调用该函数,则相应的主调函数的调用点处,直接以变量作为实参进行调用即可,而不需要实参变量有任何的特殊要求。如:对应上面定义的swap函数,相应的主调函数可写为:
int main(void)
{
int a=13,b=56;
swap(a,b); //直接以变量a和b作为实参调用swap函数
cout<<a<< ' ' <<b; //输出结果
return 0;
}
使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给 形参分配存储单元,形参变量是实参变量的副本;
2.常引用
例如:
int main(void)
{
int a;
const int &ra = a;
//ra = 1;//错误 ra被const修饰不能修改
a = 1;
printf("%d %d\n",a,ra);
}
3.引用作为返回值
#include <iostream>
using namespace std;
float temp; //定义全局变量temp
float fn1(float r); //声明函数fn1
float &fn2(float r); //声明函数fn2
float fn1(float r) //定义函数fn1,它以返回值的方法返回函数值
{
temp=(float)(r*r*3.14);
return temp;
}
float &fn2(float r) //定义函数fn2,它以引用方式返回函数值
{
temp=(float)(r*r*3.14);
return temp;
}
void main() //主函数
{
float a=fn1(10.0); //第1种情况,系统生成要返回值的副本(即临时变量)
//float &b=fn1(10.0); //第2种情况,可能会出错(不同 C++系统有不同规定)
//不能从被调函数中返回一个临时变量或局部变量的引用
float c=fn2(10.0); //第3种情况,系统不生成返回值的副本
//可以从被调函数中返回一个全局变量的引用
float &d=fn2(10.0); //第4种情况,系统不生成返回值的副本
//可以从被调函数中返回一个全局变量的引用
cout<<a<<c<<d;
}
(1)以引用返回函数值,定义函数时需要在函数名前加&。
(2)用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。