📅  最后修改于: 2023-12-03 14:59:51.437000             🧑  作者: Mango
在 C++ 中,指针和引用都是用来访问内存中的变量的工具。它们可以用于传递参数、访问动态分配的内存等等。
指针是一个特殊的变量,它存储了一个内存地址。指针变量本身存储在内存中,但是它所指向的变量不一定存储在内存中。
在 C++ 中,定义指针需要使用 *
运算符。例如,下面的代码定义了一个指向整数变量的指针:
int* p;
通常情况下,指针变量需要初始化为 nullptr
,表示它没有指向任何变量。例如:
int* p = nullptr;
也可以将指针初始化为指向某个变量的地址:
int i = 42;
int* p = &i;
解引用指针可以访问指针所指向的变量。使用 *
运算符可以获取指针所指向的变量的值。例如:
int i = 42;
int* p = &i;
std::cout << *p << std::endl; // 输出 42
指针可以用来修改所指向的变量。例如:
int i = 42;
int* p = &i;
*p = 0; // 修改 i 的值为 0
std::cout << i << std::endl; // 输出 0
指针可以用来传递函数参数。例如,下面的函数通过指针修改了变量的值:
void reset(int* p) {
*p = 0;
}
int i = 42;
reset(&i); // i 的值变为 0
使用 new
运算符可以动态分配内存,返回的是所分配内存的地址。例如:
int* p = new int; // 分配一个整数的内存空间
std::cout << *p << std::endl; // 输出未定义值
*p = 42; // 修改所分配内存的值为 42
std::cout << *p << std::endl; // 输出 42
delete p; // 释放所分配的内存
引用是另一种访问内存中的变量的方式。引用和指针不同,引用本身不是一个变量,只是一个变量的别名。
在 C++ 中,定义引用需要使用 &
运算符。例如,下面的代码定义了一个引用,它是变量 i
的别名:
int i = 42;
int& r = i;
修改引用的值实际上是修改所引用的变量的值。例如:
int i = 42;
int& r = i;
r = 0; // 修改 i 的值为 0
std::cout << i << std::endl; // 输出 0
引用可以用来传递函数参数。例如,下面的函数通过引用修改了变量的值:
void reset(int& r) {
r = 0;
}
int i = 42;
reset(i); // i 的值变为 0
和指针相比,使用引用作为函数参数更加安全和方便。
指针和引用是 C++ 中常用的工具。指针可以用来访问动态分配的内存,引用可以用来传递函数参数。不同的场景需要选择不同的工具来使用。