模块 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 x3. 解引用运算符 (*)
要访问或修改存储在指针指向的地址处的值,我们使用取消引用运算符(或间接寻址运算符),也由符号 * 表示:
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?