小沈的C++学习8——引用
一、引用的概念
我们可以把引用想象成一个数据的别名,通过 类型+&+引用名=变量名 的方式定义
当我们对引用名的数据更改时,原变量名对应的数据也会改变。代码如下:
int a=1; int &b=a; cout<<b<<endl; a = 2; cout<<b<<endl; b = 1; cout<<a<<endl;
可以理解为两个变量在内存中公用的一个数据,我们可以打印引用和原变量的地址:
int a=1; int &b=a; cout<<&a<<endl; cout<<&b<<endl;
可以发现两个地址是相同的
二、引用的适用范围
引用本质上是另一个变量名,只不过这个声明的变量和原本的变量名共用一个内存地址
以下对象可以被引用:
1.int、float、double、char等类型定义的变量
2.指针变量 int *a;int *&p=a;
3.常量变量 const int&h=3
const int *b;const int *&pb
4.数组
5.引用 (无限套娃)
以下对象不可以被引用:
1.void变量(我也不知道这个引用到底有啥用
2.没有引用的引用,没有引用的指针(禁止套娃)
3.没有空引用,即不能像指针一样指向空值
三、引用的应用
1.做函数的形式参数
比如一个最简单的数据交换函数
如果是指针作为参数是这样子的:
#include<iostream> using namespace std; void swap(int *x,int *y) { int temp=*x; *x=*y; *y=temp; } int main(){ int x=1,y=2; swap(&x,&y); cout<<"x="<<x<<endl; cout<<"y="<<y<<endl; }
如果用引用就可以这么写:
#include<iostream> using namespace std; void swap(int &x,int &y) { int temp=x; x=y; y=temp; } int main(){ int x=1,y=2; swap(x,y); cout<<"x="<<x<<endl; cout<<"y="<<y<<endl; }
**同名、同类型参数无法让编译器识别使用何种函数
2.让一个函数起到多个返回值的作用
我们可以利用引用直接用外部变量接收多个函数的结果
这个时候宇宙超级无敌霹雳旋风终极无敌版V2.0就可以做更新了
#include<iostream> using namespace std; int max(int a,int b) { if(a>b) { return a; } return b; } int min(int a,int b) { if(a<b) { return a; } return b; }//比较 void findst(int *p,int h,int l,int (*func)(int,int),int &res,int &y,int &x) { res=*p; int num=0; for(int i=1;i<h*l;i++){ int bak = func(res,p[i]); if(res!=bak){ res = bak; num=i; } } y=num/l+1; x=num%l+1; return; }//“打擂台” int main() { /*矩阵实战*/ int d[3][4]={{1,2,3,4},{4,5,6,7},{7,8,9,10}}; int *p=&d[0][0]; int res,x,y; findst(p,3,4,max,res,y,x); cout<<"最大的数是"<<res<<"\n它在第"<<y<<"行第"<<x<<"个"<<endl; findst(p,3,4,min,res,y,x); cout<<"最小的数是"<<res<<"\n它在第"<<y<<"行第"<<x<<"个"; }
3.用引用作为返回值,不生成值的副本,实现返回方式的多样性
4.函数调用作为左值
5.用const限定引用
6.返回堆变量中的引用
posted on 2020-03-26 08:16 crazyplayer 阅读(124) 评论(0) 编辑 收藏 举报