当前位置: 首页 > news >正文

什么是网站解决方案什么网站做的号

什么是网站解决方案,什么网站做的号,sem竞价培训,百度指数购买#x1f31f;#x1f31f;作者主页#xff1a;ephemerals__ #x1f31f;#x1f31f;所属专栏#xff1a;C 目录 前言 一、引用的概念和定义 二、引用的特性 三、引用的实用性 1.引用传参 2.引用做返回值 2.1 引用做返回值的作用 2.2 引用坍缩问题、悬挂引用问… 作者主页ephemerals__ 所属专栏C 目录 前言 一、引用的概念和定义 二、引用的特性 三、引用的实用性 1.引用传参 2.引用做返回值 2.1 引用做返回值的作用 2.2 引用坍缩问题、悬挂引用问题 四、const修饰引用 五、引用和指针的联系 总结 前言 我们都知道在c语言中指针是一种功能十分强大的数据类型它允许我们直接访问并且操作内存。然而它在使用时稍有不慎就会出错。对此c引入了一个新的概念引用。引用可以实现部分类似于指针的功能并且它比指针更加安全、简洁。 一、引用的概念和定义 引用作为c中的一种特殊别名机制当我们定义引用时并不是创建了一个新变量而是 给原有的变量起了一个别名。它的定义方式如下 (数据类型) 引用名 引用对象; 代码举例 #include iostream using namespace std;int main() {int a 0;int b a;//定义引用给a取了一个别名a;cout b endl;b;cout a endl;return 0; } 运行结果 可以看到无论是对a自增还是对b自增它们表示的值都会发生改变。我们再来打印一下它们的地址 cout a endl; cout b endl; 结果显示它们的地址是相同的。这表明引用只是给变量起了一个别名表示的还是同一块内存空间。 我们画图表示一下引用 二、引用的特性 引用有以下三点语法特性 1.引用在定义的时候必须要表明它所表示的对象。 2.由于引用是用作给变量取别名所以一个变量可以有多个引用。当然引用也可以有引用。 3.引用一旦指定了对象就不能再指定其他对象。 三、引用的实用性 了解的引用的概念和特性之后我们不禁会发出疑问既然要对变量进行操作直接修改不就好了嘛何必还要取一个别名呢 1.引用传参 举一个例子 #include iostream using namespace std;void Swap(int x, int y) {int tmp x;x y;y tmp; }int main() {int a 3;int b 5;Swap(a, b);//交换a和b的值cout a a endl;cout b b endl;return 0; }运行结果 可以看到使用引用传参通过函数交换了变量a和b的值。由于引用是给变量起别名所以此时的x和y就表示a和b本身。因此我们在函数内部就实现了这两个元素的交换。相比传址调用它的写法更加简单并且在语法层面引用是不开辟新内存的减少了拷贝节省了内存空间。 2.引用做返回值 2.1 引用做返回值的作用 首先来看一段代码 #include iostream using namespace std;int fun() {static int a 10;return a; }int main() {fun();//报错cout fun() endl;return 0; } 很显然以上代码是不可行的。函数的返回值是一个临时变量而临时变量具有常性我们无法对这个值进行修改。但是引用做返回值可以做到这一点 #include iostream using namespace std;int fun() {static int a 10;return a; }int main() {fun();cout fun() endl;return 0; } 我们将返回值改成int的引用类型则此时函数返回静态变量a的别名所以我们让它自增就相当于改变了a的值。 有了引用做返回值我们在调用函数的时候就可以通过这个返回值直接访问和修改原始对象并且避免了临时变量的拷贝增加程序运行的效率。 2.2 引用坍缩问题、悬挂引用问题 刚才引用做返回值的方法虽然好用但是难免会出现一些问题。举个例子 #include iostream using namespace std;int func1() {static int a 0;return a; }int main() {int x func();return 0; } 虽然这里的func1函数返回了a的引用但是我们却在主函数中以一个整形变量来接收这里就会发生一种隐式的类型转换--引用坍缩编译器会将这个返回值转换为它所引用的对象的一个临时拷贝这将导致我们无法访问并修改a的值达不到预期效果。所以一定要以相同类型的引用来接收引用返回值。 再举一个例子 #include iostream using namespace std;int func2() {int a 0;return a; }int main() {int x func();return 0; } 在func2函数中我们创建了一个局部变量a并且返回它的引用但是由于a是一个局部变量当函数栈帧销毁时变量a的空间已经被释放了此时的返回值就变成一个悬挂引用野引用也就是说这个引用的主体已经不存在了程序的运行结果就是未定义的。所以我们在使用引用做返回值时一定要注意返回后的引用主体是否还存在。 四、const修饰引用 我们在定义引用时可以在变量名之前加上const修饰称之为常引用。当一个引用被const修饰时该引用就无法修改其所表示的对象。例如 #include iostream using namespace std;int main() {int a 0;const int b a;a 10;b 20;//报错return 0; } 注意对于一个被const修饰的变量定义它的引用时也需要用const修饰。例如 #include iostream using namespace std;int main() {const int a 0;int b a;//报错const int c a;//正确return 0; }对于以下情况定义引用时也必须要用const修饰 #include iostream using namespace std;int main() {int a 5;const int b a * 3;//a*3是一个临时对象具有常性它的引用要用const修饰float c 5.5f;const int d c;//当引用和对象的类型不同时由于隐式类型转换的结果是一个临时对象定义引用也需要用const修饰return 0; }五、引用和指针的联系 引用和指针是相辅相成的它们能够实现对方的部分功能但是又不可完全替代。它们的一些联系和区别如下 1.从语法层面上引用是对一个对象取别名不会开辟空间而指针用于存储一个对象的地址会开辟空间。 2.定义引用时必须要指定表示的对象而指针在定义时可以不指向对象。 3.引用不能改变表示的对象而指针可以改变。 4.由于引用是对象的别名所以可以直接通过引用访问对象而指针则需要解引用才能访问对象。 5.相比指针引用在使用上更加安全不容易出现悬挂引用的问题。 6.在某些情况下指针和引用在语义上可以相互替代例如函数传参都可以形成数据共享并且避免内存的过度消耗。 总结 今天我们学习了引用。引用的功能十分强大同时也弥补了指针的一些不足。深入理解引用对我们之后学习并实现类的相关功能有很大帮助。如果你觉得博主讲的还不错就请留下一个小小的赞在走哦感谢大家的支持❤❤❤
http://www.sczhlp.com/news/187166/

相关文章:

  • 卖菜网站应该怎么做天津专业网站制作流程优势
  • 网站备案自己备案和代理备案娄底住房和城乡建设部网站
  • 网站网络结构设计服务商标是什么意思
  • 网站在线压缩品牌建设不足怎么表达
  • 红色简约的手机社区类网站html5响应式模板下载如何利用php开源系统建立php网站
  • 网站文件夹没有权限网站重新设计需要多久
  • 网站备案 失败外贸人才网招聘网
  • 新手php网站建设安徽建设工程信息网技术服务电话
  • 夷陵区住房和城乡建设局网站响应式所长网址导航网页模板下载
  • 厦门做网站多少钱深圳网站开发找哪里
  • 免费1级做爰片在线观看 历史网站wordpress建站教程
  • 永久免费网站建设系统安阳信息网官网
  • 怎么制作网站logo全民建网站
  • 网站开发图书管理系统报告摘要成都app开发公司前十名
  • 厦门网站专业建设百色住房和城乡建设部网站
  • 网站特点怎么写平台设计思路
  • 哈尔滨门户网站是什么长沙做网站最好的公司
  • 镇江网站设计公司报价网站怎么做响应
  • 哪些网站是做包装的网站外链建设是什么
  • 电商网站开发常用代码网站服务器机房
  • 小说发表哪个网站赚钱新乡网站建设专业熊掌网络
  • 杭州网站建设代理商05网课时作业答案
  • 学校网站管理与建设办法淄博公司网站建设价格
  • 艺术品电商网站开发网站做自动群发百度搜录
  • 北京网站制作设计公司排名关于网站建设的合同范本
  • 会员充值网站怎么做有多个网页的大网站如何做
  • 周浦手机网站建设公司dede做英文网站优化
  • 东莞齐诺做网站中国设计网站官网地址
  • asp.net做网站的步骤如何制作电子印章
  • 动易网站地图关于建设单位网站的方案