指针和引用的区别

简介: 指针和引用都是C++程序员经常使用的东西,但是他们有什么区别呢?本期我们共同探讨。

1.指针是一个变量,存储的是一个地址,引用跟原来的变量实质上是同一个东西,是原变量的别名。

2.指针可以有多级(但是不能对指针进行取地址,因为地址本身不是变量是一个常量),引用只有一级。

3.指针可以为空(此时指向nullptr),引用不能为NULL且在定义时必须初始化。

4.指针在初始化后可以改变指向(常指针不可以),而引用在初始化之后不可再改变。

5.sizeof指针得到的是本指针的大小(sizeof数组名是数组的大小),sizeof引用得到的是引用所指向变量的大小。

6.当把指针作为参数进行传递时,也是将实参的一个拷贝传递给形参,两者指向的地址相同,但不是同一个变量,在函数中改变这个变量的指向不影响实参,而引用却可以(可以通过对指针解引用改变实参的值,此时跟引用能达到相同的效果)。

7.引用的底层实现还是一个const指针,因此定义一个引用会开辟一个指针大小的内存存放指针,但是引用本身不占内存。

相关文章
|
3月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
51 1
|
2月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
23 3
|
2月前
|
存储
头指针和头结点的区别
头指针和头结点的区别
|
3月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
53 5
|
3月前
|
存储 C语言
一级指针和二级指针的区别
一级指针和二级指针的区别
37 1
|
3月前
|
存储 安全 编译器
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
33 2
|
3月前
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```
|
3月前
|
C语言
C语言--指针数组和数组指针的区别
C语言--指针数组和数组指针的区别
|
3月前
|
C++
【C++系列】指针对象和对象指针的区别
这段内容介绍了C++中`ListNode`对象和指针的两种使用方式以及它们的区别。首先,`ListNode dummy(0); ListNode* cur = &dummy;创建了一个`ListNode`对象`dummy`在栈上,`cur`是`dummy`的地址。而`ListNode* dummy = new ListNode(0); ListNode* cur = dummy;`则在堆上分配了一个`ListNode`,`dummy`和`cur`都是指向该对象的指针。使用`&dummy`作为虚拟头节点简化链表操作,避免特殊处理。栈分配内存自动管理但生命周期受限,堆分配内存需手动释放且速度较慢。