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

目录

  • 1 引言
  • 2 指针
  • 3 解引用
  • 4 引用
  • 5 指针和引用区别

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。

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

你可能感兴趣的:(C++,c++)