热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

小沈的C++学习8——引用

一、引用的概念我们可以把引用想象成一个数据的别名,通过类型+&+引用名变量名的方式定义当我们对引用名的数据更改时,原变量名对应的数据也会改变。代码如下:inta1;int&ba;c

一、引用的概念

我们可以把引用想象成一个数据的别名,通过 类型+&+引用名=变量名  方式定义 

当我们对引用名的数据更改时,原变量名对应的数据也会改变。代码如下:


技术分享图片技术分享图片

int a=1;
int &b=a;
cout
<endl;
a = 2;
cout
<endl;
b = 1;
cout
<


View Code 1

可以理解为两个变量在内存中公用的一个数据,我们可以打印引用和原变量的地址:


技术分享图片技术分享图片

int a=1;
int &b=a;
cout
<<&a<<endl;
cout
<<&b<


View Code 2

可以发现两个地址是相同的

二、引用的适用范围

引用本质上是另一个变量名,只不过这个声明的变量和原本的变量名共用一个内存地址

  以下对象可以被引用:

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
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="<endl;
cout<<"y="<endl;
}


View Code 3

如果用引用就可以这么写:


技术分享图片技术分享图片

#include
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="<endl;
cout<<"y="<endl;
}


View Code 4

**同名、同类型参数无法让编译器识别使用何种函数

 

2.让一个函数起到多个返回值的作用

我们可以利用引用直接用外部变量接收多个函数的结果

这个时候宇宙超级无敌霹雳旋风终极无敌版V2.0就可以做更新了


技术分享图片技术分享图片

#include
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){
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
<<"最大的数是"<"\n它在第"<"行第"<""<<endl;
findst(p,
3,4,min,res,y,x);
cout
<<"最小的数是"<"\n它在第"<"行第"<"";
}


宇宙超级无敌霹雳旋风终极无敌版V2.1

 

3.用引用作为返回值,不生成值的副本,实现返回方式的多样性

4.函数调用作为左值

5.用const限定引用

6.返回堆变量中的引用

 


推荐阅读
  • 本文探讨了一种常见的C++面试题目——实现自己的String类。通过此过程,不仅能够检验开发者对C++基础知识的掌握程度,还能加深对其高级特性的理解。文章详细介绍了如何实现基本的功能,如构造函数、析构函数、拷贝构造函数及赋值运算符重载等。 ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • 探讨了一个包含纯虚函数的C++代码片段,分析了其中的语法错误及逻辑问题,并提出了修正方案。 ... [详细]
  • 3DSMAX制作超现实的体育馆模型
    这篇教程是向脚本之家的朋友介绍3DSMAX制作超现实的体育馆模型方法,教程制作出来的体育馆模型非常地不错,不过教程有点难度,需要有一定基础的朋友学习,推荐到脚本之家,喜欢的朋友可 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 本文探讨了使用普通生成函数和指数生成函数解决组合与排列问题的方法,特别是在处理特定路径计数问题时的应用。文章通过详细分析和代码实现,展示了如何高效地计算在给定条件下不相邻相同元素的排列数量。 ... [详细]
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
  • 探讨如何在映射文件中处理重复的属性字段,以避免数据操作时出现错误。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 在项目冲刺的最后一天,团队专注于软件用户界面的细节优化,包括调整控件布局和字体设置,以确保界面的简洁性和用户友好性。 ... [详细]
  • JavaScript 页面卸载事件详解 (onunload)
    当用户从页面离开时(如关闭页面或刷新页面),会触发 onunload 事件,此时可以执行预设的脚本。需要注意的是,不同的浏览器对 onunload 事件的支持程度可能有所不同。 ... [详细]
  • 探索Java 11中的ZGC垃圾收集器
    Java 11引入了一种新的垃圾收集器——ZGC,由Oracle公司研发,旨在支持TB级别的内存容量,并保证极低的暂停时间。本文将探讨ZGC的开发背景、技术特点及其潜在的应用前景。 ... [详细]
  • 利用无代码平台实现高效业务应用开发
    随着市场环境的变化加速,全球企业都在探索更为敏捷的应用开发模式,以便快速响应新兴的商业机遇。然而,传统的软件开发方式不仅成本高昂,而且耗时较长,这往往导致IT与业务部门之间的合作障碍,进而影响项目的成功。本文将探讨如何通过无代码开发平台解决这些问题。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
author-avatar
虚实人生轶事
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有