引用
1.基本使用
我们建立引用的作用是为了方便引用变量。
当我们声明了一个引用时,我们必须同时使用另一个变量的名字来将它初始化,即 声明其代表的变量。
格式如下:
类型 &引用名=已定义的变量名
int i=10; int &j=i;// j是i的引用
需要注意的一点,其中“&”并不代表地址。
在了解基本应用之后,我们需要探究 i与j之间的关系。
代码如下:
#include<iostream>
using namespace std;
int main(){
int i=10;
int &j=i;
i=30;
cout<<"i="<<i<<" j="<<j<<endl;
j=40;
cout<<"i="<<i<<" j="<<j<<endl;
cout<<"变量i的地址是:"<<&i<<endl;
cout<<"变量j的地址是:"<<&j<<endl;
return 0;
}
我们发现:只要 i 和 j 任意一个变量发生改变,另一个变量也会发生改变。i与j使用的是同一地址。
特别注意的是,引用并不是一种独立的数据类型,在它出现时,我们必须立即对其进行初始化。否则会产生错误。
2.引用作为函数参数
我们在之前使用参数交换数据时通常都会想到使用指针,现在我们可以使用“引用”这一方式来进行交换。
#include<iostream>
using namespace std;
void swap(int &p,int &q ){
//将实参传给形参,p和q分别为i和j的引用。在p,q变化的时候,j和i也跟着变化
int t;
t=p;
p=q;
q=t;
}
int main(){
int i=2;
int j=10;
swap(i,j);
cout <<"i="<<i<<" j="<<j<<endl;
return 0;
}
3.使用引用返回函数值
当使用引用返回函数值时,可以将函数调用放在赋值运算的左边。
#include <iostream>
using namespace std;
int a[]={
1,2,3,4,5}
int &index(int ){
return a[i];
}
int main(){
cout<<index(2)<<endl;
index(2)=10;
cout<<index(2)<<endl;
return 0;
}
我们需要注意是:只有调用函数不为“void”型的时候才能使用引用返回函数值,否则会出现错误。
4.关于“引用”的总结
在"引用"时,我们首先要明确一点:
引用与其所代表的变量共享同一内存单元,系统不会为此另分配存储空间。
这意味着,引用并不是一种独立数据类型,它是其它数据的“别名”。
还需要注意的是:
1.引用与被应用数据的关系是双向的。
任意一方发生改变,另一方也会发生相同的改变(用const时除外)。
2.不能出现引用的数组。
int a[4]="abcd";
int &ra[4]=a;
数组名a只能代表数组首元素的地址,
其本身并不是占有一个存储空间的变量。