📜  C++中的指针和引用(1)

📅  最后修改于: 2023-12-03 14:59:51.437000             🧑  作者: Mango

C++中的指针和引用

在 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++ 中常用的工具。指针可以用来访问动态分配的内存,引用可以用来传递函数参数。不同的场景需要选择不同的工具来使用。