跳转到主要内容
模块 5 · 第 2 课(共 2)课程中的12/18~15 min
模块课程(2/2)

指针

指针是 C++ 最强大、最独特的功能之一。它们允许您直接访问计算机的物理内存,从而实现高效的资源管理和高性能。


1. 什么是内存和地址?

您在程序中声明的每个变量都存储在 RAM 存储器的一个单元中。每个单元都有一个唯一的内存地址(通常以十六进制格式表示,例如0x7ffee3bf87ac)。

C++ 允许我们使用 address-of 运算符 & 获取任何变量的内存地址:

C++
int x = 42;
std::cout << &x; // Prints the memory address of x (e.g., 0x7ffee3bf87ac)

2. 指针的定义

指针是一种特殊变量,它将另一个变量的内存地址存储为其值。

该语法要求在数据类型后使用星号 *:

C++
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x

3. 解引用运算符 (*)

要访问或修改存储在指针指向的地址处的值,我们使用取消引用运算符(或间接寻址运算符),也由符号 * 表示:

C++
int x = 42;
int* ptr = &x;

std::cout << *ptr; // Prints 42 (the value ptr points to)

*ptr = 100; // Modifies the value of x through the pointer
std::cout << x;    // Now prints 100!

4. 空指针:nullptr

不指向任何有效地址的指针应使用 nullptr 关键字(在 C++11 中引入)进行初始化:

C++
int* ptr = nullptr; // Safe null pointer

自己尝试一下

锻炼#cpp.m5.l2.e1
尝试:0加载中...

main 中有一个整型变量 value 初始化为 42。声明一个指向整型 ptr 的指针,指向 value 的地址。使用ptr的解引用将value的值设置为100,最后使用std::cout打印value。

正在加载编辑器...
显示提示

使用 `int* ptr = &value;`声明指针,通过取消引用`*ptr = 100;`修改值,并打印`std::cout << value;`。

3 次尝试后可用的解决方案

锻炼#cpp.m5.l2.e2
尝试:0加载中...

定义一个函数 doubleValue,它接受一个指向整数 (int* ptr) 的指针,并将其指向的值乘以 2(如果指针不为空)。在 main 中,调用 doubleValue 传递变量 num 的地址并打印它。

正在加载编辑器...
显示提示

该函数必须接受“int* ptr”。在里面,使用`*ptr = (_ptr) _ 2`。在 main 中用“doubleValue(#);”调用它。

3 次尝试后可用的解决方案

Quiz#cpp.m5.l2.q1
准备好

根据提供的代码,哪个表达式允许您直接修改 a 的值,将其设置为 10?

C++
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?
答案选项