c++中引用和指针的区别
1、指针是一个实体,需要分配内存空间。引用只是变量的别名,
不需要分配内存空间。
2、引用在定义的时候必须进行初始化,并且不能够改变。指针在
定义的时候不一定要初始化,并且指向的空间可变。引用的初始
值不能为NULL。
3、有多级指针,但是没有多级引用,只能有一级引用。
4、指针和引用的自增运算结果不一样。指针自增运算是指向下一
个空间,引用自增运算是引用的变量值加1。
5、sizeof 引用得到的是所指向的变量(对象)的大小,而sizeof
指针得到的是指针本身的大小。
6、引用访问一个变量是直接访问,而指针访问一个变量是间接访
问。
7、使用指针前最好做类型检查,防止野指针的出现;
8、作为参数时也不同,传指针的实质是传值,传递的值是指针的
地址;传引用的实质是传地址,传递的是变量的地址;
9、引用底层是通过指针实现的。
9: int x = 1;
00401048 mov dword ptr [ebp-4],1
10: int &b = x;
0040104F lea eax,[ebp-4]
00401052 mov dword ptr [ebp-8],eax
汇编解释:
x的地址为ebp-4,
b的地址为ebp-8,
因为栈内的变量内存是从高往低进行分配的。所以b的地址比x的
低。
lea eax,[ebp-4] # 将x的地址ebp-4放入eax寄存器
mov dword ptr [ebp-8],eax # 将eax的值放入b的地址ebp-8中
上面两条汇编的作用即:
将x的地址存入变量b中,这不和将某个变量的地址存入指针变量
是一样的吗?所以从汇编层次来看,的确引用是通过指针来实现的。
c++中引用和指针的区别相关推荐
- C++中引用与指针的区别(详细介绍)
转载:http://www.cnblogs.com/tracylee/archive/2012/12/04/2801519.html C++中的引用与指针的区别 指向不同类型的指针的区别在于指针类型可 ...
- 浅谈C++中引用和指针的区别
之前我们介绍了什么是引用,错过的小伙伴们可以戳这里 ↓ https://blog.csdn.net/Sun_Life_/article/details/89304920 既然引用底层是用指针形式实现的 ...
- C++中的引用与指针的区别
C++中的引用与指针的区别 指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象 ...
- 引用和指针的区别?传引用比传指针安全,为什么?如果我使用常量指针难道不行吗?
引用和指针的区别 (1) 引用在创建的同时必须初始化,即引用到一个有效的对象:而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值. (2) 不存在NULL引用,引用必须与合法的存储单元关联 ...
- 2-5:C++快速入门之引用,引用和指针的区别
文章目录 (1)引用的概念 (2)引用的特点 (3)常引用 (4)引用的应用场景 A:做参数 B:做返回值 (5)引用和指针 在第一次学习C语言指针时,许多教材上都会给出一个交换两个变量值的例子,开始 ...
- c++中别名和指针*的区别
c++中别名&和指针*的区别 int n;int &m = n; 在C++中,多了一个C语言没有的引用声明符&,如上,m就是n的引用,简单的说m就是n的别名,对m的任何操作,对 ...
- C++ 引用详解(引用的特点,引用与指针的区别,引用的其他使用)
目录 引用 一.引入 二.C++中较为麻烦的运算符 三.引用的定义 四.引用的特点 五.对比指针与引用 六.引用与指针的区别(重点) 1.语法层面的区别 2.汇编层面的区别 七.引用的其他使用 引用 ...
- 【C语言】引用和指针的区别?
首先解释在C语言中,什么是引用: 1.引用概念 引用是别名,必须在声明的时候初始化.即:是指一个已定义变量的别名.(一个内存空间,有两个名字都可以操作) 引用:在函数调用时,是变量的别名,不可以单独 ...
- c++引用与指针的区别
★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需 ...
最新文章
- CODING 缺陷管理功能正式开始公测
- C# ArrayList集合
- 介绍一个能避免 CORS 错误的 Chrome 扩展 - Moesif Origin CORS Changer
- Android 隐藏状态栏,沉浸式状态栏,状态栏背景色,状态栏字体色,透明状态工具类
- Handler.postDelayed(new Runnable)是否运行在主线程
- Linux GCC GDB 第一节
- js正则表达式——数字校验
- php store快捷键设置,mac 下 phpstorm 快捷键整理
- 33个网站足以使你成为一个天才
- [3D检测系列-PointRCNN]复现PointRCNN代码,并实现PointRCNN3D目标检测可视化,包含预训练权重下载链接(从0开始以及各种报错的解决方法)
- 不用电脑怎么设置路由器
- 完美国际架设mysql_完美国际SF-物理机架设服务端教程
- 收藏 一句话问答 linux
- 从身家500万到两手空空,看她如何再次成功翻身
- 【十三】python面向对象之类和对象
- java sapi_使用Microsoft SAPI进行语音合成
- 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(8月4日)...
- Python实现一个键盘记录器功能
- C#使用FFmpeg的总结
- 人脸识别与膜虹识别_虹膜识别技术和人脸识别技术的区别是什么
热门文章
- Ouster 64线机械式激光雷各话题数据量简要分析
- 制作纯英文字幕的视频
- neso n810 i7 android 4.4,NESO推11.6寸平板/PC二合一产品E1210
- vue-router.esm.js?8c4f:1905 TypeError: Cannot read property ‘$route‘ of undefined
- 【ResNet】Pytorch从零构建ResNet50
- 前端 summernote富文本编辑器 点击文章预览的功能实现
- mysql主键索引和普通索引之间的区别是什么
- 获取地址栏倒数第一个“/”和倒数第二个之间“/”的数值
- 话里话外:流程落地切忌眉毛胡子一把抓(二)
- Angular 1.x和ES6的结合