指针、引用、解引用简单使用总结

1 引言

指针和引用都是间接访问变量的方式。
而解引用是对指针取值的操作。

2 指针

比如:

// 初始化指针p为空指针
int *p = nullptr;
// 初始化int类型指针
int *p = new int;
// c++11之前初始化空指针
int *p = 0;

//指针使用后需进行内存释放,否则会造成内存泄漏
delete p;

以上两种方式都可以初始化一个指针,指针是一个“容器”,里面可以装数据。
错误的指针初始化方式:

int *p;

这样没有给指针任何初始化方式的称为野指针,在vs中会提示编译不通过,因为没有分配地址,会随机分配一个地址,导致不可预估的错误。

3 解引用

而解引用是获取指针数值的操作,比如:

cout << *p << endl;

这个*p就是解引用操作,可以对指针p重新赋值。解引用有以下使用场景:

  • 访问指针指向的对象:通过解引用可以访问指针指向的实际对象。例如,如果有一个指向整型变量的指针 int* ptr,通过 *ptr可以获取该整型变量的值。这在需要使用指针指向的对象时非常常见。

  • 修改指针指向的对象:通过解引用可以修改指针指向的实际对象的值。例如,如果有一个指向整型变量的指针 int* ptr,通过 *ptr = 10 可以将指针所指向的整型变量的值设置为 10。

  • 动态内存分配:在 C++ 中,通过 new操作符可以动态地分配内存,并返回一个指向所分配内存的指针。通过解引用可以访问和修改动态分配的内存。例如,int* ptr = new int; *ptr = 5; 分配了一个整型变量的内存,并将其值设置为 5。

  • 遍历数组或容器:在 C++ 中,数组和容器可以通过指针进行遍历。通过解引用指针,可以访问数组或容器中的元素。例如,int* ptr = arr; for (int i = 0; i < size; i++) { cout << *ptr << " "; ptr++; } 可以遍历一个整型数组并打印每个元素的值。

4 引用

引用可以理解为别名,它也是表示操作的是地址。
初始化:

int number = 10;
int& ref = number;  // 引用初始化为变量 number

5 指针和引用区别

引用和指针是 C++ 中两种不同的方式来间接访问变量或对象。它们存在以下的区别:

  • 定义和初始化:指针可以在声明时不进行初始化,或者初始化为空指针(nullptr),也可以指向其他对象。而引用必须在声明时进行初始化,并且一旦被初始化后就不能再指向其他对象。

  • 空值:指针可以具有空值,即指向空地址(nullptr),表示它当前没有指向任何对象。而引用必须始终引用一个有效的对象,它不能指向空值。

  • 重新赋值:指针可以在运行时被重新赋值,可以改变指向的对象。而引用一旦被初始化后,就无法再引用其他对象,它始终指向初始化时所引用的对象。

  • 空间占用和操作:引用在内部实现上通常被视为指针的语法糖,因此引用没有自己的独立存储空间,而指针本身需要分配存储空间来存储地址。此外,由于引用被看作是变量的别名,可以直接使用引用来访问变量,不需要解引用操作符 *,而指针需要通过解引用操作符来访问所指向的对象。

  • 空引用(Null Reference):引用不允许为空值,但在特殊情况下,比如在异常情况下,引用可能成为空引用。空引用是一个语法错误,并且会导致程序的不可预测行为。指针可以具有空值,也可以被赋值为 nullptr。

需要根据具体的需求来选择使用指针还是引用。指针更灵活,可以指向多个对象,允许空值和重新赋值,但需要对空指针进行判断。引用更简洁,更易于使用,但在声明时必须初始化,并且不能改变引用的目标。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面条有点辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值