C++中的引用
引用的概念
建立引用的作用通常是为变量起另一个名字,变量的引用通常被认为是变量的别名。
在声明一个引用时,必须用另一个变量来将其初始化。例如:
int i=5;
int j=&i; //声明j是一个整型变量变量的引用,并用i将其初始化。
此处j可以看作是变量i的一个别名,经过这样的声明后i和j的作用相同,代表同一个变量。对其进行的操作也是等价的,例如改变j的值,i的值也会随之发生变化。
变量和引用的关系
#include<iostream>
using namespace std;
int main()
{
int i;
int &j = i;
i = 30;
cout << "i=" << i << ' ' << "j=" << j << endl;
j = 80;
cout << "i=" << i << ' ' << "j=" << j << endl;
cout << "变量i的地址是:" << &i << endl;
cout << "引用j的地址是: " << &j << endl;
return 0;
}
运行结果如下:
由此可见,i和j的值同步更新,并且使用同一块内存空间。
说明
1、引用名可以是任何合法化的变量名。除了用作函数的返回值和参数外,在声明引用时,必须立即进行初始化,不能声明完成后再赋值。
2、为引用提供的初始值,可以是一个变量,也可以是一个引用。
3、指针是通过地址间接访问某一个变量,而引用是通过变量别名直接访问某个变量。每次使用引用时,可以不书写解引用运算符“*”,因而使用引用可以简化程序。
4、引用在初始化后不能再重新声明为另一个变量的引用。
5、并不是任何数据的类型的可以引用,例如:
①、不能建立void类型的引用;
②、不能建立引用的数组:
int a[4]="abcd"; int &ra[4]=a; //非法
③、不能建立引用的引用,不能建立指向引用的指针;
int a=10; int &&b=a; //非法 int &*c=a; //非法
6、可以将引用的地址赋给一个指针,此时指针指向的是原来的变量。
7、引用运算符“&”只在声明引用时起该作用,其他场合时出现的“&”都作为地址操作符。
除此之外引用的功能还有很多,例如引用作为函数参数,作为函数返回值等。