C++指针与引用的区别详解
需积分: 17 28 浏览量
更新于2024-08-19
收藏 8.82MB PPT 举报
"指针与引用的区别-C++-谭浩强"
在C++编程语言中,指针和引用是两种非常重要的概念,它们都允许我们间接访问和操作内存中的对象。然而,它们之间存在显著的区别:
1. 访问方式:
- 指针:指针是一个变量,它存储了另一个变量的内存地址。通过解引用操作(*),我们可以访问存储在该地址上的值。指针可以被赋值为NULL,也可以指向不同的对象。
- 引用:引用本质上是已初始化的别名,一旦创建,就始终绑定到初始化时指定的对象。引用不是独立的实体,它只是目标对象的一个额外名称,无法改变引用所指的对象。
2. 初始化:
- 指针:指针在声明时可以不初始化,但在使用前必须赋予一个有效的地址。如果未初始化,使用未定义的指针会导致未定义的行为。
- 引用:引用在声明时必须立即初始化,并且一旦初始化后,不能再改变引用的目标。未初始化的引用是非法的。
3. 空值:
- 指针:指针可以被设置为空值(NULL),表示它不指向任何对象,这是一种有用的特性,可以用来标记指针当前未使用或无效。
- 引用:引用不能是空的,它总是引用某个特定的已存在的对象。如果引用没有对象可引用,就会导致编译错误。
4. 指针操作:
- 指针:可以有指针的指针(二级指针等),可以进行指针算术,如增加或减少指针值来遍历数组。还可以动态分配和释放内存。
- 引用:没有引用的引用,也无法进行指针算术。引用不涉及内存管理,它总是指向初始化时的那个对象。
5. 函数参数:
- 指针:作为函数参数时,传递指针可以改变实参的值,因为函数内部可以通过指针修改外部变量。
- 引用:作为函数参数时,引用也提供了一种修改实参值的方式,而且在函数签名中,引用更直观地表示参数将被修改。
6. sizeof运算符:
- 指针:sizeof操作符返回指针本身的大小,通常与平台相关的字节数(例如,32位系统上通常是4字节,64位系统上是8字节)。
- 引用:sizeof操作符对引用使用时,返回的是引用所绑定的对象的大小,而不是引用本身的大小。
7. 内存占用:
- 指针:指针本身占据内存空间,存储的是一个地址值。
- 引用:虽然引用在内存中不占用额外的空间,但编译器会在编译时处理引用,确保其正确行为。
了解这些区别对于编写高效、安全的C++代码至关重要。在编程时,根据需求选择使用指针或引用,例如,当需要动态分配内存或进行复杂的数据结构操作时,指针可能是更好的选择;而当希望创建一个“别名”并确保不会改变所指对象时,引用则更为合适。
2023-07-28 上传
2024-06-20 上传
2023-12-12 上传
2023-09-06 上传
2024-01-18 上传
2023-04-01 上传
2023-09-12 上传
2023-07-01 上传
2023-11-24 上传
李禾子呀
- 粉丝: 26
- 资源: 2万+
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器