引用(C++学习笔记 15)

一、引用的作用

建立引用的作用是为变量另起一个名字,变量的引用通常被认为是变量的别名。
对变量声明一个引用,并不另外开辟内存单元,变量 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;
}

执行结果如下图所示:
在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值