C++之引用
2016-05-19 20:10
309 查看
引用相当于给变量起个别名,并不分配内存空间,C++中话是这么说,但实际上这个引用就相当于C语言中的指针,实际是开辟了4字节的空间,与开辟指针大小的空间相同,且指向变量的地址。
引用相当于指针,其引用的大小与指针大小相同,但当打印sizeof时,打印出的就是变量的大小,这就是C++中做的一种蒙蔽。
例如:
其中int &ra不可以再指向其他变量。也就是说,引用int &ra相当于int *const ra,即ra可以修改自身的值,但不能修改其指向,但指针可以修改其指向。
一、引用实际是指针
下面来验证一下引用实际是个指针:
打开内存和监视窗口,进行调试:
这是变量a的地址,在栈上分配了空间,在分配的空间中写入了值。
![](http://img.blog.csdn.net/20160622103623117)
![](http://img.blog.csdn.net/20160622103634648)
再来看引用p:
![](http://img.blog.csdn.net/20160622104034244)
![](http://img.blog.csdn.net/20160622104040940)
监视到p的地址是0x002dfe34,与变量a处于同一地址,通过内存可以看到实际p是指向了0x002dfe34(地址从左到右是低地址到高地址),so引用就是个指针。
最后打印出sizeof(p)是8,看内存截图p就占了4个字节,这一切都是C++的障眼法。
![](http://img.blog.csdn.net/20160622104903358)
二、总结
1、引用型变量必须初始化,引用变量必须挂在一个现有的同类型变量上;
2、引用变量的地址与来源变量的地址在同一个地址上,即地址相同;
3、引用变量与来源变量任何一个数值变化,则另一个一定变;
4、引用变量做函数参数,经常使用来代替原变量赋值或者取值;
5、引用变量的原理实际上就是指针变量,C++用障眼法让引用看起来是替身。
引用相当于指针,其引用的大小与指针大小相同,但当打印sizeof时,打印出的就是变量的大小,这就是C++中做的一种蒙蔽。
例如:
int a = 200; int &ra = a; ra = 300; //ra可以修改值 int b = 100; int &ra = b; // 编译报错
其中int &ra不可以再指向其他变量。也就是说,引用int &ra相当于int *const ra,即ra可以修改自身的值,但不能修改其指向,但指针可以修改其指向。
一、引用实际是指针
下面来验证一下引用实际是个指针:
#include<iostream> using namespace std; int main() { double a = 10.5; double &p = a; cout << sizeof(p) << endl; system("pause"); return 0; }
打开内存和监视窗口,进行调试:
这是变量a的地址,在栈上分配了空间,在分配的空间中写入了值。
再来看引用p:
监视到p的地址是0x002dfe34,与变量a处于同一地址,通过内存可以看到实际p是指向了0x002dfe34(地址从左到右是低地址到高地址),so引用就是个指针。
最后打印出sizeof(p)是8,看内存截图p就占了4个字节,这一切都是C++的障眼法。
二、总结
1、引用型变量必须初始化,引用变量必须挂在一个现有的同类型变量上;
2、引用变量的地址与来源变量的地址在同一个地址上,即地址相同;
3、引用变量与来源变量任何一个数值变化,则另一个一定变;
4、引用变量做函数参数,经常使用来代替原变量赋值或者取值;
5、引用变量的原理实际上就是指针变量,C++用障眼法让引用看起来是替身。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性