授课语音

C++ 中的指针与引用的区别

C++ 中,指针和引用是操作内存和变量的两种重要方式。理解两者的概念、使用场景和区别,是掌握 C++ 编程的基础。


1. 指针(Pointer)

指针是存储内存地址的一种变量。通过指针,我们可以间接访问内存中的数据。

指针的特点

  • 指针是一个变量,用于存储另一个变量的内存地址。
  • 可以通过运算符 * 访问指针指向的内存。
  • 指针的值可以改变(可以指向不同的变量)。
  • 可以动态分配内存并通过指针管理。

指针代码案例

#include <iostream>
using namespace std;

int main() {
    int a = 10; // 定义一个整型变量
    int* p = &a; // 定义一个指针变量并初始化为变量 a 的地址

    // 输出指针的信息
    cout << "变量 a 的值: " << a << endl;            // 输出变量 a 的值
    cout << "变量 a 的地址: " << &a << endl;        // 输出变量 a 的地址
    cout << "指针 p 的值: " << p << endl;          // 输出指针存储的地址
    cout << "指针 p 指向的值: " << *p << endl;     // 解引用指针获取指向的值

    // 修改通过指针访问的值
    *p = 20;
    cout << "修改后的变量 a 的值: " << a << endl;   // 验证 a 的值被修改

    return 0;
}

代码说明

  1. int* p = &a; 将变量 a 的地址赋值给指针 p
  2. 使用 *p 解引用指针获取地址对应的值,并可以修改该值。

2. 引用(Reference)

引用是变量的别名。一旦引用被初始化,就不能更改引用的目标。

引用的特点

  • 引用本质上是变量的另一个名字。
  • 引用必须在定义时初始化,并且不能为空。
  • 引用的值一旦绑定到一个变量,就不能更改绑定。

引用代码案例

#include <iostream>
using namespace std;

int main() {
    int a = 10; // 定义一个整型变量
    int& ref = a; // 定义一个引用 ref 指向变量 a

    // 输出引用的信息
    cout << "变量 a 的值: " << a << endl;            // 输出变量 a 的值
    cout << "引用 ref 的值: " << ref << endl;       // 输出引用的值

    // 修改引用的值
    ref = 20;
    cout << "通过引用修改后的变量 a 的值: " << a << endl; // 验证 a 的值被修改

    return 0;
}

代码说明

  1. int& ref = a; 定义引用 ref 为变量 a 的别名。
  2. 修改 ref 的值,实际上是在修改 a 的值。

3. 指针与引用的区别

特性 指针 引用
初始化 可以在定义后赋值或初始化为空 定义时必须初始化,且不能为空
是否可更改指向 可以更改指针指向的变量 一旦绑定变量,引用的绑定无法更改
是否支持运算 支持指针运算,如 p++ 不支持引用运算
是否可以为空 指针可以为空(如 nullptr 引用不能为空
用途 常用于动态内存分配和数组操作 常用于传递参数和返回值

4. 总结

  • 指针 适合需要动态分配和管理内存的场景。
  • 引用 更加安全,用于实现类似别名的效果。
  • 熟练掌握两者的使用能够编写高效、安全的代码,并灵活解决问题。
去1:1私密咨询

系列课程: