C++ 引用

2025年4月3日 | 阅读 7 分钟

在 C++ 中,引用使用与号(&)符号定义。C++ 中现有变量的别名是一个引用变量,它允许通过不同的名称访问相同的内存位置。引用一旦被初始化为某个变量,就不能更改以引用另一个变量。

指针存储另一个变量的内存地址,这允许通过解引用间接访问。与引用不同,重新分配的指针可以指向其他内存位置。

因此,当别名变量时,引用提供了比指针更简单、更安全的替代方案,避免了指针算术的复杂性,同时确保了数据操作的效率。

语法

它具有以下语法:

其中,

  • 类型:它定义了引用的数据类型,该类型应与所引用变量的类型一致。
  • & (与号):它表示 referenceName 是一个引用。
  • referenceName:它是引用的名称,作为现有变量的别名。
  • = (赋值运算符):它通常用于将引用绑定到已声明的变量。
  • existingVariable:它是被引用的变量。它将作为此变量的替代名称。

C++ 简单引用示例

让我们来看一个 C++ 中的引用示例。

示例

编译并运行

输出

Original Value: 25
Reference Value: 25
Modified Value: 50
Modified Reference: 50

说明

这个 C++ 程序演示了如何使用引用。首先,我们声明一个整数变量 number,其初始值为 25。之后,创建了指向 number 的引用 ref,它作为 number 的别名并共享相同的内存位置。

当程序打印 number 和 ref 时,它们显示相同的值。随后,将 ref 修改为 50 也会直接更新 number,这证明引用只是现有变量的另一个名称。最后,程序打印修改后的值,显示 number 和 ref 现在都持有 50。

应用

C++ 中引用的几个应用如下

1. 通过引用传递参数

与号(&)运算符在 C++ 中通常用于通过引用向函数传递参数。它使函数能够更改传递给它的变量,而不是使用副本。这对于修改原始变量而无需返回值非常有用。它还在处理大型数据结构时通过避免不必要的副本提高了效率。

C++ 通过引用传递参数示例

让我们来看一个 C++ 中通过引用传递参数的实例

示例

编译并运行

输出

Enter the first number: 35
Enter the second number: 45
Before swapping: First Number = 35, Second Number = 45
After swapping: First Number = 45, Second Number = 35

说明

在此示例中,我们交换两个数字并使用引用调用而不是临时变量。swapValues() 函数接收用户作为引用输入的两个数字,这使得可以直接修改初始值。

在函数内部,算术运算用于通过首先添加它们然后减去值以在交换位置提取原始数字来交换数字。最后,显示更新后的值,显示交换成功。

2. 从 C++ 函数返回引用

在 C++ 中,函数可以返回变量的引用,这使得能够有效地操作大型数据结构并避免重复。它特别适用于性能优化,并允许从函数内部修改现有变量。

示例

让我们来看一个 C++ 中返回 C++ 函数引用的实例。

示例

编译并运行

输出

Enter a number: 4
Modified value: 8

说明

这个 C++ 程序展示了如何通过从函数返回引用来修改变量。一个整数引用被传递到 modifyValue() 函数中,该函数将其值加倍,然后返回对修改后变量的引用。

当用户在 main() 函数中输入一个数字时,modifyValue() 函数接收它并就地更新它。所做的任何修改都会影响原始变量,因为函数返回一个引用,避免了不必要的副本。

3. 在基于范围的循环中修改数据

在基于范围的循环中,我们可以使用引用(&)来更改容器的初始元素。这在处理大型数据集时特别有利,因为它可以减少重复并提高效率。

示例

让我们来看一个 C++ 中在基于范围的循环中修改数据的实例。

示例

编译并运行

输出

Enter a word: Hello
Modified text: Ifmmp

说明

在此示例中,我们使用基于范围的 for 循环修改用户输入的单词中的每个字符。该循环通过引用遍历字符串中的每个字符,将其 ASCII 值增加 1,从而使字母向前迭代(例如,“a”变为“b”)。

使用引用的优点

C++ 中引用的几个优点如下

  1. 比指针更安全:引用必须初始化,这有助于降低野引用的风险。
  2. 简化的语法:引用使用起来更简单,因为它们不需要解引用运算符(*)来访问值。
  3. 直接访问:访问对象成员时,可以用点(.)运算符替换指针所需的箭头(->)运算符。

C++ 中引用的缺点

C++ 中引用的几个缺点如下

  1. 不可变绑定:一旦形成,就不能重新分配给另一个对象。
  2. 不能为 NULL:引用必须始终有效且不能为 NULL。
  3. 强制初始化:引用必须在声明时初始化。
  4. 不适用于某些数据结构:引用不能用于创建动态数据结构,例如链表或树。

C++ 引用 MCQS

1. 以下哪个选项关于 C++ 中的引用是正确的?

  1. 它们可以重新分配给另一个变量。
  2. 它们在声明时应始终初始化。
  3. 它们可以为 NULL。
  4. 它们需要解引用运算符(*)来访问值。

答案: (b) 它们在声明时必须始终初始化

2. 如果在 C++ 中声明时未初始化引用会发生什么?

  1. 它会导致编译错误。
  2. 它会自动分配为 NULL。
  3. 它被分配一个垃圾值。
  4. 它像指针一样工作。

答案: (a) 它会导致编译错误

3. 在 C++ 中声明引用时使用以下哪个运算符?

  1. *
  2. &
  3. ->
  4. ::

答案: (b) &

4. 在 C++ 中使用引用相对于指针的主要优点是什么?

  1. 引用可以重新分配。
  2. 它们提供更安全、更容易的变量访问。
  3. 引用支持 NULL 值。
  4. 它们需要显式内存分配。

答案: (b) 它们提供更安全、更容易的变量访问。

5. C++ 中的函数可以返回引用吗?

  1. 是的,它允许更改原始变量。
  2. 不,函数只能返回指针。
  3. 是的,但它会创建变量的新副本。
  4. 不,返回引用会导致错误。

答案: (a) 是的,它允许更改原始变量。


下一个主题C++ 引用与指针