引用用于程序的不同部分使用两个以上的变量名指向同一地址,使得对其中任一个变量的操作实际上都是对同一地址单元进行的操作。
声明引用一般如下:
int num;
int &ref = num;
int& ref=num;
int & ref=num;
注:引用不是值,不占用存储空间,声明引用时,目标的存储状态不会改变。引用一旦被初始化,就不能再重新赋值。
#include<iostream.h>
using namespace std;
void main()
{
int num=50;
int &ref=num;
ref+=10;
cout<<"num="<<num<<endl;
cout<<"ref="<<ref<<endl;
}
程序运行结果:
num=60
ref=60
注:
1.一个变量被声明为引用时必须进行初始化,除非这个引用是用作函数的参数或返回值。
2.引用不是变量,所以不能说明引用的引用,也不能说明数组元素的类型为引用,或指向引用的指针。
int &a[5]; //wrong
int &*p; //wrong
由于指针是变量,可以说明对指针变量的引用。
int *a;
int *&p=a;
int b;
p=&b; //&b express the address of b
3. 引用与指针不同。
指针的值是某一变量的内存单元的地址。
引用则与初始化它的变量具有相同的内存单元地址。
指针是个变量,可以把它再赋值指向其他的地址。
建立引用时必须初始化,并且绝不指向其他不同的地址。
4.可以用一个引用初始化另一个引用
int num=50;
int &ref1=num;
int &ref2=ref1;
ref2=100; //num is changed to 100
5.可以把函数的参数说明成引用,以建立函数参数的引用传递方式
引用类型通常被用于主子函数间需互相传大量数据的设计之中,从而减少大量数据经过堆栈的复制。
C++中同类程序中可使用引用类型使得传递的形参和实参都指向同一个内存地址,既减少大量数据经过堆栈的复制,又避免了地址溢出错误的发生。
#include<iostream>
using namespace std;
void swap(int &x,int &y);
void main()
{
int x=5,y=6;
cout<<"before swap, x:"<<x<<",y:"<<y<<endl;
swap(x,y);
cout<<"after swap, x:"<<x<<",y:"<<y<<endl;
}
void swap(int &rx,int &ry)
{
int temp =rx;
rx=ry;
ry=temp;
}