变量的引用就是变量的别名,&是“引用声明符”,假如有一个变量a,想给它起一个别名b,则:
int a;
int &b=a;
对变量声明一个引用,并不另开辟存储单元,b和a都代表同一变量单元。
在声明一个引用的同时,必须同时使之初始化,即声明它代表哪一个变量。
在声明一个变量的引用之后,在本函数执行期间,该引用一直与代表的变量相联系,不能再作为其他变量的别名。
<例1>了解引用和变量的关系
#include
#include
using namespace std;
int main()
{
int a = 10;
int& b = a;
a = a * a;
cout <
可以看出因为引用并未开辟存储空间,所以引用的值与变量的值始终相等。
C++之所以增加”引用“,主要是利用他作为函数参数,以扩充函数传递数据的功能。
C++调用函数时,有两种传递书的方式,一种是常用的方法:将实参的值传递给形参,称为传值方式调用;另一种是将实参的地址传递给引用型形参,称为引用方式调用。
<例1>无法实现两个变量的值互换的程序
#include
#include
using namespace std;
void swap(int a,int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int i = 3, j = 5;
swap(i, j);
cout << setw(5) << i << setw(5) << j << endl;
return 0;
}
<例2>使用指针变量作形参,实现两个变量的值互换
#include
#include
using namespace std;
void swap(int *a,int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int i = 3, j = 5;
swap(&i, &j);
cout << setw(5) << i << setw(5) << j << endl;
return 0;
}
<例3>利用“引用形参”实现两个变量的值互换
#include
#include
using namespace std;
void swap(int &a,int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int i = 3, j = 5;
swap(i, j);
cout << setw(5) << i << setw(5) << j << endl;
return 0;
}
void &a=9;
char c[6]="hello";
char &rc[6]=c;
数组名c只代表数组首元素的地址,本身并不是一个占有存储空间的变量。
int a=3;
int &b=a;
int *p=&b;
相当于
int *p=&a;
但是不能定义指向引用类型的指针变量
int *p=& b;
int i=5;
int *p=&i;
int * &pt=p;
int i=5;
const int * &a=i;
a=3; //企图改变引用的值,错误
//但是const并不阻止改变引用所代表的的变量的值
i=3; //合法
这一特征在使用引用作为函数形参时是有用的,因为有时希望保护形参的值不被改变。
int i=5;
const &a=i+3;
用这种方法不仅可以用表达式对引用进行初始化,还可以用不同类型的变量对之初始化(要求能赋值兼容的类型)
double i=3.1415;
const int &a=d; //此时输出a的值将是3而不是3.1415
如果在上面声明引用时不用const,则会发生错误。