C++之为什么对引用变量取地址得到的是被引用变量的地址
来源:互联网 发布:.com.cn是什么域名 编辑:程序博客网 时间:2024/05/21 06:39
C++引用
编辑
引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;
(1)&在此不是求地址运算,而是起标识作用。
(2)类型标识符是指目标变量的类型。
(3)声明引用时,必须同时对其进行初始化。
(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
百度百科是这样介绍引用的,下面我们抛开这些介绍来看一下在底层这个引用到底是怎样实现的
有如下代码
反汇编后
通过查看反汇编代码会发现
1.编译器为引用变量b分配了四个字节的空间dword ptr [ebp-8]
2.这四个字节存放的是变量a的地址
3.当对变量a与引用变量b使用&时编译器对此符号做出了不同的解释
4.不同之处是在对引用变量b做&时编译器并没有把它解释为取b的地址,而是解释为取b的内容(b中存放的是a的地址)
现在我相信你不用运行这段代码就已经知道结果了
那你是不是还是疑惑,还是想知道个为什么?
为什么对引用变量取地址得到的是被引用变量的地址??
没有什么为什么?
如果你真的想知道为什么我不介意在这误人子弟一下,,,,,
下面我们在来看一下百度百科对引用的关键介绍-------“引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样”
看到没????
“引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样“
C++编译器就是为了符合这句话,也就是说C++编译器对引用的支持是根据这句话设计的,c++编译器必须要保证”对引用的操作与对变量直接操作完全一样“。。。。。。。
0 0
- C++之为什么对引用变量取地址得到的是被引用变量的地址
- C/C++中关于地址、指针和引用变量的学习笔记(十) : 引用型变量
- 关于Js变量地址引用的问题
- 引用局部变量地址
- int& test(int ** p) 引用返回和指针取地址 获得局部变量的问题
- Java面向对象【经典案例】数组是对象,其变量的值是引用地址
- 对临时变量的引用
- C/C++中关于地址、指针和引用变量的学习笔记(一)
- C/C++中关于地址、指针和引用变量的学习笔记(二) : 数组
- C/C++中关于地址、指针和引用变量的学习笔记(三) : 结构
- C/C++中关于地址、指针和引用变量的学习笔记(四) : 函数
- C/C++中关于地址、指针和引用变量的学习笔记(五) : 指针
- C/C++中关于地址、指针和引用变量的学习笔记(六) : const和void
- C/C++中关于地址、指针和引用变量的学习笔记(七) : sizeof和typedef
- C/C++中关于地址、指针和引用变量的学习笔记(八) : 命令行参数
- C/C++中关于地址、指针和引用变量的学习笔记(九) : 内存结构
- 【C#】显示引用类型变量的内存地址(以字符串为例)
- C中引用'&'与取地址'&'的区别
- 按钮写到UItableView的头视图还是列表之外
- UI资料
- Java的StringBuffer类
- 【codevs 2975】与2,3,5无关的数
- Head First C# 实验室 赛狗日
- C++之为什么对引用变量取地址得到的是被引用变量的地址
- iOS 中数字的格式化处理
- 防止字典参数缺少发生意外崩溃的解决方法
- 采用先进的视觉技术测试图形用户界面:工具、技术和实践
- 静态数组实现栈
- .ini文件转换为.xml文件
- U3D——刀光轨迹插件的改进
- MFC+Direct2D简化坐标缩放
- POJ1655 Balancing Act 求树的重心