何为引用...给已有的变量取别名

  1. int num = ;
  2. int &a = num;//此处 &不是取地址 而是标明 a是引用变量(a 是 num的别名)

注意:
1、引用必须初始化
2、引用一旦初始化 就不能再次修改别名
 
  1. int num = ;
  2. int &a = num;
  3.  
  4. int data = ;
  5. a = data;//不是data别名为a 而是将data值赋值a(num)

案例:

  1. int num = ;
  2. int &a = num;//a就是num的别名 a==num
  3.  
  4. cout<<"num = "<<num<<endl;//10
  5. //对a赋值 == 对num赋值
  6. a=;
  7. cout<<"num = "<<num<<endl;//100
  8.  
  9. //a是num的别名 所以num和a具有相同的地址空间
  10. cout<<"a 的地址:"<<&a<<endl;
  11. cout<<"num 的地址:"<<&num<<endl;

了解完如何简单应用引用,接着来深挖【引用--给数组取个别名】

  1. void test02()
  2. {
  3. int arr[] = {,,,,};
  4. //需求:给arr起个别名
  5. int (&my_arr)[] = arr;//my_arr就是数组arr的别名
  6.  
  7. int i=;
  8. for(i=;i<;i++)
  9. {
  10. cout<<my_arr[i]<<" ";
  11. }
  12. cout<<endl;
  13. }

还有,引用作为函数的参数

  1. void my_swap1(int a,int b)
  2. {
  3. int tmp = a;
  4. a = b;
  5. b=tmp;
  6. }
  7. void my_swap2(int *a,int *b)//a=&data1,b =data2;
  8. {
  9. int tmp = *a;
  10. *a = *b;
  11. *b = tmp;
  12. }
  13.  
  14. void my_swap3(int &a, int &b)//a=data1,b=data2
  15. {
  16. int tmp = a;
  17. a = b;
  18. b= tmp;
  19. }
  20. void test04()
  21. {
  22. int data1 = ,data2=;
  23. cout<<"data1 = "<<data1<<", data2 = "<<data2<<endl;
  24. //my_swap1(data1,data2);//交换失败
  25. //my_swap2(&data1,&data2);//交换成功
  26. my_swap3(data1,data2);//交换成功(推荐)
  27. cout<<"data1 = "<<data1<<", data2 = "<<data2<<endl;
  28. }

指针的引用

  1. #include<stdlib.h>
  2. #include<string.h>
  3. void my_str1(char **p_str)//p_str = &str
  4. {
  5. //*p_str == *&str == str
  6. *p_str = (char *)calloc(,);
  7. strcpy(*p_str, "hello world");
  8.  
  9. return;
  10. }
  11. void my_str2(char* &my_str)//char* &my_str = str;my_str等价str
  12. {
  13. my_str = (char *)calloc(,);
  14. strcpy(my_str, "hello world");
  15. return;
  16. }
  17. void test07()
  18. {
  19. char *str = NULL;
  20. //需求:封装一个函数 从堆区 给str申请一个空间 并赋值为"hello world"
  21. //my_str1(&str);
  22. my_str2(str);
  23. cout<<"str = "<<str<<endl;
  24. free(str);
  25. }
引用的本质在c++内部实现是一个指针常量. Type& ref = val; // Type* const ref = &val;
c++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同,只是这个过程是编译器内部实现,用户不可见
  1. int data = ;
  2. int &a = data;//a就是data的别名
  3. //编译器内存转换:int * const a = &data;
  4.  
  5. a=;//等价于data=100
  6. //*a = 100;//*a == data

何为引用法---细谈C++引用的更多相关文章

  1. 浅谈Java引用和Threadlocal的那些事

      这篇文章主要介绍了Java引用和Threadlocal的那些事,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1 背景 某一天在某一个群里面的某个群友突然提出了一个问 ...

  2. 细谈unity资源管理的设计

    一.概要 本文主要说说Unity是如何管理的,基于何种方式,基于这种管理方式,又该如何规划资源管理,以及构建bundle,是后面需要详细讨论的. 二.Unity的资源管理方式 2.1 资源分类 uni ...

  3. 细谈unity资源加载和卸载

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 在了解unity的资源管理方式之后,接下来细谈一下Unity的资源是如何从磁盘中加载到运行时的内存中,以及又是如 ...

  4. perl 引用(数组和hash引用) --- perlreftut - Mark 的一个简单的'引用'教程 ---Understand References Today. --Mark Jason Dominus, Plover Systems (mjd-perl-ref+@plover.com)

    https://blog.csdn.net/fangwei1235/article/details/8570886 首页 博客 学院 下载 论坛 APP 问答 商城 活动 VIP会员 招聘 ITeye ...

  5. php中引用&的真正理解-变量引用、函数引用、对象引用

    php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. ...

  6. spring jpa 实体互相引用返回restful数据循环引用报错的问题

    spring jpa 实体互相引用返回restful数据循环引用报错的问题 Java实体里两个对象有关联关系,互相引用,比如,在一对多的关联关系里 Problem对象,引用了标签列表ProblemLa ...

  7. final修饰的变量是引用不能改变,还是引用的对象不能改变???

    对于这个问题,我们不能只记结论,要拿实例说话,参看以下代码: public class Demo { public static void main(String[] args) { final St ...

  8. Java程序员从笨鸟到菜鸟之(五十一)细谈Hibernate(二)开发第一个hibernate基本详解

    在上篇博客中,我们介绍了<hibernate基本概念和体系结构>,也对hibernate框架有了一个初步的了解,本文我将向大家简单介绍Hibernate的核心API调用库,并讲解一下它的基 ...

  9. Spark RDD概念学习系列之细谈RDD的弹性(十六)

    细谈RDD的弹性  所谓,弹性,是指在内存不够时可以与磁盘进行交换. 弹性之一:自动的进行内存和磁盘数据存储的切换   弹性之二:基于Lineage(血缘)的高效容错   弹性之三:Task如果失败会 ...

随机推荐

  1. 吴裕雄--天生自然Android开发学习:android 背景相关与系统架构分析

    1.Android背景与当前的状况 Android系统是由Andy Rubin创建的,后来被Google收购了:最早的版本是:Android 1.1版本 而现在最新的版本是今年5.28,Google ...

  2. docker pull很慢解决办法

    经常拉取镜像的时候很慢或者拉不下来,这里可以使用阿里云镜像加速器,然后试试看有没有效果. ##使用阿里云镜像加速器 [root@localhost ~]# mkdir -p /etc/docker [ ...

  3. 爬虫时伪装header信息

    在爬虫时,一般需要伪装Agent信息,放在header中 1.header不是必传参数,在需要的时候进行伪装 2.header = {"User-Agent": "Moz ...

  4. dubbo分布式框架下web层调用业务层一直报空指针异常的解决办法

    java.lang.NullPointerException............... 环境:SSM(通用mapper)+Dubbo 1.检查导包 提示注解@Reference  应该导入  im ...

  5. 华为VS小米 营销手段有待继续强化

    营销手段有待继续强化" title="华为VS小米 营销手段有待继续强化"> 对于大多数来说,希望看到强者愈强的戏码.比如:NBA里的N场连胜.苹果帝国千秋万载一统 ...

  6. Ionic3学习笔记(十二)拍照上传图片以及从相册选择图片上传

    本文为原创文章,转载请标明出处 目录 安装插件 导入 app.module.ts 创建 provider 更多 效果图 1. 安装插件 终端运行: ionic cordova plugin add c ...

  7. openCryptoki安装

    什么是OpenCryptoki OpenCryptoki提供Linux下的PKCS#11库和工具,支持包括TPM和IBM加密硬件以及软件令牌. 目前(2019/05/06)最新release版为3.1 ...

  8. CS229 Lesson 5 生成学习算法

    课程视频地址:http://open.163.com/special/opencourse/machinelearning.html 课程主页:http://cs229.stanford.edu/ 更 ...

  9. Angular总结

    angular关键核心点进行总结 1 2 angular中有很多知识点需要学习,学习成本是很大的,我通过平常开发中把一些 很重要知识点总结下来,不管是以后拿来用,或者跳槽面试需要,我都感觉是很有帮助的 ...

  10. 初学Qt——vs2012开发环境下的窗体跳转

    最近接了份外快,要求使用vs+qt开发一个简单的数据管理系统.qt开发使用的语言是c++,然而c++只是大一第二学期有教过而已,基本也差不多忘光了,废话不多说,讲下今天遇到的问题吧 如标题所说,窗体跳 ...