C++指针与引用的区别详解

需积分: 17 7 下载量 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++代码至关重要。在编程时,根据需求选择使用指针或引用,例如,当需要动态分配内存或进行复杂的数据结构操作时,指针可能是更好的选择;而当希望创建一个“别名”并确保不会改变所指对象时,引用则更为合适。