文章目录

  • 声明及定义
  • 代码
  • 引用变量的特点
  • 图片解释
  • 引用变量的本质
  • 引用变量的用途
  • int & 和 const int & 的区别
  • 引用变量和宏定义(#define)的区别

声明及定义

[const] int& 变量名 = 右值
注意:[]内的是可选的。即这里的const限定词是可选的。

代码

void test01(){int a = 2;int& b = a;printf("\n");printf("value of a =%d\n",a);//0073fde4printf("value of b =%d\n",b);//0073fde4printf("address of a =%p\n",&a);//0073fde4printf("address of a =%p\n",&b);//0073fde4b = 3;printf("value of a =%d\n",a);//3printf("value of b =%d\n",b);//3int* const d = &b;//d是一个int指向int类型的指针常量printf("address of d =%p\n",&(*d));//0073fde4printf("address of d =%p\n",d);//0073fde4
}

打印结果:

引用变量的特点

1.声明定义时,必须初始化。 不能 int& b;可以 int& b = 变量;
2.一旦指定指向某个变量,不能修改为指向其他变量,始终效忠此变量。
3.引用变量 是 所指向的变量的别名,即一个变量,有两个名称。根据其中一个名称修改其值,另一个也会跟着变。
4.虽然引用变量是所指向的变量的别名,但是它也占用内存,即有自己的内存块,其中存储的所指向的变量的地址,只是编译器,给我们做了优化,再执行&b时,直接访问的是所指向的变量的地址,而不是自己的分配的内存的地址。编译器把引用变量的内存给屏蔽掉了,我们无法访问,所以给我们产生了一种引用变量不占内存的假象。其实是占内存的。

图片解释

引用变量的本质

1.int a = 10;
2. int& b = a;
3. int * const c = &a;//将变量a的内存地址,赋值给 指针常量 c。指针常量的特点是,一旦确定指向,不可修改其指向,但可以,修改其指向的内存地址储存的值。
所以这里 引用变量b的作用 就和 c扮演的角色一样。只是这里在引用变量中把解引用符给隐藏了。这就是引用变量的特点及本质。我们用b,肯定比用 *c方便的多,是吧。 通过&b,我们可以获取变量a的地址,通过 &(*c) 我们也可以获取变量a的内存地址。所以引用变量的底层用到的就是 指针常量,只是这里编译器给我们特殊处理了。

引用变量的用途

1.最常用的是做为函数的参数,定义为 const int& b;使通过b只能读去变量内容,不能修改其内容。

int & 和 const int & 的区别

    int a = 2;int& b1 = a;//correctconst int& b2 = a;//correctconst int c = 3;int& d1 = c;//error  当所引用的变量是 const限定的,这里的 引用变量定义时也必须是const的。const int& d2 = c;//correct//区别2int &d3 = 4;//error  右值不能是字面量,即确定的值const int& d4= 4;//correct ,右值可以是实数值,底层会先把右值赋值给一个临时变量,然后d4 所引用的变量就是这个临时变量。

引用变量和宏定义(#define)的区别

区别就是在于 宏定义的内容,是在编译期,都被使用此宏定义的地方,替换掉了。所以 #define NUMBER 2; 这种代码将来是真正的不占内存的。而引用变量 ,上面也已介绍,表面看是不占内存,其实底层本质是占内存的。

C++中的引用变量详解相关推荐

  1. python variable_PyTorch中的Variable变量详解

    一.了解Variable 顾名思义,Variable就是 变量 的意思.实质上也就是可以变化的量,区别于int变量,它是一种可以变化的变量,这正好就符合了反向传播,参数更新的属性. 具体来说,在pyt ...

  2. C++中引用变量详解

    目录 一.什么是引用? 二.引用的注意事项 三.引用的本质 四.常量引用 五.引用的使用场景​​​​​​​ 六.引用和指针的区别 一.什么是引用? 引用实际上是给一个变量起别名,编译器不会为引用变量开 ...

  3. c语言path环境变量,Windows下PATH等环境变量详解(转载)

    在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH.正确地配置这些环境变量,是能够顺利学习.开发的前提.而经常出现的问题是:有的学习者能够按照提示 ...

  4. 在oracle环境变量里,oracle环境变量详解

    共享存储文件系统(NFS) 通常情况下,ORACLE_SID这个环境变量全称Oracle System Identifier,,用于在一台服务器上标识不同的实例,默认情况下,实例名就是ORACLE_S ...

  5. python 下划线变量_Python中的下划线详解

    这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线_的不同用法绝大部分(不全是)都是一种惯例约定. 一. 单个下划线直接做变量名(_) 主要有三种情况: 1. 解释器中 _ ...

  6. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  7. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  8. Python中的高级数据结构详解

    这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...

  9. C++ 中的this指针详解及实例

    C++ 中的this指针详解及实例 这篇文章主要介绍了C++ 中的this指针详解及实例的相关资料,this指针是类的一个自动生成.自动隐蔽的私有成员,它存在于类的非静态成员中,指向被调用函数所在的对 ...

最新文章

  1. 搭建Ubuntu18.04+Anaconda3.x+Pycharm+SimpleITK(一)
  2. Jmeter之线程组详解
  3. Oracle数据文件的备份与恢复
  4. 我国三大坐标系的区别(西安80、北京54、WGS-84)
  5. mysql增错误_使用MySQL练习增删改查时因为版本问题出现连接错误
  6. 安卓案例:绑定和解绑服务
  7. 在Windows 7 Ultimate 64位上安装Java
  8. linux中下载迅雷链接
  9. 查找指定时间段内的文件
  10. SAP那些事-理论篇-5-SAP玩你还是你玩SAP
  11. 【SDOI2013】项链 题解
  12. DNS污染,配置DNS
  13. 不同Normalization之间的比较
  14. 大地坐标与空间直角坐标系的相互转化
  15. 编译问题追踪 :Connect to maven.google.com:443 [maven.google.com/172.217.160.110] failed: Connection timed
  16. 磨金石教育摄影技能干货分享|近景拍摄技巧分析
  17. 强哥带你零基础学java-03运行第一个java程序
  18. bigdata学习笔记--01 Linux基础--Linux目录结构
  19. docker常用命令大全(持续更新)
  20. 2019华为软件精英挑战赛赛后总结

热门文章

  1. 压缩文件zip怎么查看注释呢,市场上一些破软件不好用啊,我有秘诀
  2. 判断身份证号码的正确性源码
  3. Kinect深度图与摄像头RGB的标定与配准(文末总结不容错过)
  4. 两性情感关系中的核心价值是什么?
  5. matlab矩阵及其基本运算—特征值分解和奇异值分解
  6. VC中_T()的作用
  7. “温水煮青蛙”的实验论证
  8. 如何在JPG照片尺寸不变的情况下压缩大小?
  9. 怎样使用PS制作木刻效果图片?添加木刻特效原来这么简单!
  10. ubuntu下安装navicat