1.什么是变量的引用
- 变量的别名
- 引用作为函数参数时,在函数调用中实现值的双向传递
引用的格式: <类型> &**<引用变量名>** = <原变量名>;
- 原变量名必须是一个已定义过的变量;
- 例:
int a;
int &b = a;
//b是a的引用,a或b的作用相同,都代表同一变量。
注意:
- &是引用声明符,并不代表地址。
- 声明变量b为引用类型,并不需要另外开辟内存单元来存放b的值。b和a内存中的同一存储单元,具有同一地址。
声明b是a的引用可以理解为使变量b具有变量a的地址。、

在声明一个引用类型变量时,必须同时使之初始化,即声明它代表哪一个变量;
- 在声明变量b是变量a的引用后,在它们所在函数执行期间, 该引用类型变量b始终与其代表的变量a相联系,不能再作为其他变量的引用(别名)。
- 非法的声明
- 企图建立数组的引用 int & a[9];
- 企图建立指向引用的指针 int & *p;
- 企图建立引用的引用 int & &px;
2.引用的简单使用
#include <iostream>
#include <iomanip>
using namespace std;
int main( )
{int a=10;
int &b=a;
a=a*a;
cout<<a<<setw(6)<<b<<endl;
b=b/5;
cout<<b<<setw(6)<<a<<endl;
return 0;
}
3.引用作为函数参数
- 用指针变量作形参,实现两个变量的值互换。 ```cpp int i=3,j=5; swap(&i,&j);
void swap(int p1,int p2) { int temp; temp=p1; p1=p2; p2=temp; }
- 这种虚实结合的方法仍然是“值传递”方式,只是实参的值是变量的地址。
- 引用传递和使用指针变量作形参有何不同?
- 指针变量要另外开辟内存单元,其内容是地址;而引用变量不是一个独立的变量,不单独占内存单元。
- 使用变量的引用,可以部分代替指针的操作。
- 引用作为函数参数比使用指针变量简单、直观、方便。
- 用引用作形参:对3个变量按由小到大的顺序排序
```cpp
#include <iostream>
using namespace std;
int main( )
{void sort(int &,int &,int &); //函数声明,形参是引用类型
int a,b,c; //a,b,c是需排序的变量
int a1,b1,c1; //a1,b1,c1最终的值是已排好序的数列
cout<<″Please enter 3 integers:″;
cin>>a>>b>>c; //输入a,b,c
a1=a;b1=b;c1=c;
sort(a1,b1,c1); //调用sort函数,以a1,b1,c1为实参
cout<<″sorted order is ″<<a1<<″ ″<<b1<<″ ″<<c1<<endl;//此时 a1,b1,c1已排好序
return 0; }
void sort(int &i,int &j,int &k) //对i,j,k 3个数排序
{void change(int &,int &); //函数声明,形参是引用类型
if (i>j) change (i,j); //使i<=j
if (i>k) change (i,k); //使i<=k
if (j>k) change (j,k); //使j<=k
}
void change (int &x,int &y) //使x和y互换
{int temp;
temp=x;
x=y;
y=temp;
}
对引用类型变量的说明
- 引用在定义的时候要初始化;
- 对引用操作就是对被引用的变量的操作;
- 对引用类型变量的初始化值不能是一个常数;
引用同变量一样有地址,可以对其地址进行操作,即将其地址赋给一指针;
int a=10,*p; int &m=a; p=&m; *p=10;
引用不仅可以用于变量,也可以用于对象;
- 当看到&a这样的形式时,如何区分是声明引用变量还是取地址的操作?
- 当&a的前面有类型符时,它必然是对引用的声明;
- 如果前面无类型符,则是去变量的地址。