一、引用的作用
建立引用的作用是为变量另起一个名字,变量的引用通常被认为是变量的别名。
对变量声明一个引用,并不另外开辟内存单元,变量 i 和引用 j 占用内存的同一位置,当 i 变化时,j 也随之变化, 反之亦然。
二、引用的格式
类型 &引用名=已定义的变量名;
注意:(1)在声明引用时,必须立即对它进行初始化,不能声明完成后再赋值。
(2)为引用提供的初始值可以是变量或另一个引用。
(3)指针是通过地址间接访问某个变量,而引用是通过别名直接访问某个变量,使用引用可以简化程序。(因为不用书写“*”)。
(4)引用在初始化后不能再重新声明为另一个变量的引用(别名)。
(5)可以将引用的地址赋给一个指针,此时指针指向原来的变量。
(6)引用仅在声明时带有引用运算符“&”,以后像普通变量一样使用,不能再带“&”,其它场合使用的“&”都是地址操作符。
例如: 声明一个 j 作为 i 的别名。
int i=5;
int &j=i; //声明j是一个整型变量的引用,用整形变量i对它进行初始化
例1: 变量和引用的关系。
#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 address is:"<<&i<<endl;
cout<<"j address is:"<<&j<<endl;
}
执行结果:
三、引用作为函数参数
例2: 指针变量作为函数参数的例子。
#include<iostream>
using namespace std;
void swap(int *m,int *n){
int temp;
temp=*m;
*m=*n;
*n=temp;
}
int main(){
int a=5,b=10;
cout<<"a="<<a<<" b="<<b<<endl;
swap(&a,&b);
cout<<"a="<<a<<" b="<<b<<endl;
return 0;
}
执行结果如下图:
例3: 引用作为函数参数的例子。
#include<iostream>
using namespace std;
void swap(int &m,int &n){
int temp;
temp=m;
m=n;
n=temp;
}
int main(){
int a=5,b=10;
cout<<"a="<<a<<" b="<<b<<endl;
swap(a,b);
cout<<"a="<<a<<" b="<<b<<endl;
return 0;
}
执行结果和例2一致。
在该例子中对m和n的访问实际上就是对a和b的访问。
四、使用引用返回函数值
例3: 使用引用返回函数值。
#include<iostream>
using namespace std;
int a[]={1,3,5,7,9};
int &index(int); //声明函数,返回一个整数类型的引用
int main(){
index(2)=25; //函数为引用时,才可以将函数调用放在"="左边
cout<<index(2);
return 0;
}
int &index(int i){
return a[i];
}
五、引用举例
例4: 应用引用的综合例子。
#include<iostream>
using namespace std;
int &max(int &num1,int &num2);
int &min(int &num1,int &num2);
main(){
int num1,num2;
cout<<"请输入第1个数:";
cin>>num1;
cout<<"请输入第2个数:";
cin>>num2;
max(num1,num2)=0;
cout<<"\n找出最大数,然后把最大数赋值为0后,两个数分别为:"<<endl;
cout<<num1<<"和"<<num2<<endl;
cout<<"\n现在,请再输入两个数:"<<endl;
cout<<"请输入第1个数:";
cin>>num1;
cout<<"请输入第2个数:";
cin>>num2;
min(num1,num2)=0;
cout<<"\n找出最小数,然后把最小数赋值为0后,两个数分别为:"<<endl;
cout<<num1<<"和"<<num2<<endl;
return 0;
}
int &max(int &num1,int &num2){
return(num1>num2)?num1:num2;
}
int &min(int &num1,int &num2){
return(num1<num2)?num1:num2;
}
执行结果如下图所示: