MST

星途 面试题库

面试题:C++中引用和指针的区别

在C++编程中,引用和指针都能实现对数据的间接访问。请详细阐述引用和指针在定义、初始化、内存分配、使用方式以及空值处理等方面有哪些具体区别?
36.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

定义

  • 引用:是已存在变量的别名,定义时需指定关联的变量,语法为类型 &引用名 = 已存在变量; ,例如int a = 10; int &ref = a;
  • 指针:是一个变量,存储的是另一个变量的内存地址,定义语法为类型 *指针名; ,例如int *ptr;

初始化

  • 引用:必须在定义时初始化,一旦初始化后就不能再引用其他变量。
  • 指针:定义时可不初始化,但使用未初始化的指针会导致未定义行为,初始化时需指定一个变量的地址,例如int a = 10; int *ptr = &a;

内存分配

  • 引用:不占用额外的内存空间,它只是目标变量的别名,和目标变量共享同一块内存。
  • 指针:本身占用内存空间,在32位系统中一般占4字节,64位系统中一般占8字节,用于存储所指向变量的内存地址。

使用方式

  • 引用:使用时就像使用原变量一样,直接通过引用名访问和操作数据,例如ref = 20;
  • 指针:需要使用解引用运算符*来访问所指向内存中的数据,例如*ptr = 20; ;访问指针本身的地址需使用&运算符,如cout << &ptr;

空值处理

  • 引用:不存在空引用,因为引用必须在定义时初始化,所以总是指向一个合法的对象。
  • 指针:可以有NULL(C++11之前)或nullptr(C++11及之后)指针,表示不指向任何对象,在使用指针前需要检查是否为nullptr,如if (ptr != nullptr) { *ptr = 20; }