Menu
CoddyTech

空指针

本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 4 课,共 56 课。

声明指针时,它不会自动指向任何有意义的内容。未初始化的指针包含随机的内存地址,如果你尝试使用它,可能会导致严重错误。这时,空指针对于安全编程就至关重要。

空指针是明确指向无处的指针。在现代 C++ 中,你可以通过用 nullptr 初始化来创建空指针:

int* ptr = nullptr;  // ptr 现在是空指针

nullptr 关键字表示指针没有指向任何有效的内存位置。这比让指针未初始化安全得多,因为你可以在尝试解引用指针之前检查它是否为空。

使用任何指针之前,都应该用一个简单的 if 语句检查它是否不为 null:

if (ptr != nullptr) {
    // 这里可以安全地使用 *ptr
    int value = *ptr;
}

这个练习可以防止程序因访问无效内存位置而崩溃。声明指针时,始终将其初始化为 nullptr,并在解引用前检查它是否为空。

challenge icon

挑战

简单

创建一个程序,通过在解引用指针前检查指针是否为空,演示如何安全地使用指针。

将提供以下输入:

  • 一个字符串,它的值为 "valid" 或 "null"

你的程序应当:

  1. 声明一个名为 data 的整数变量,并将其初始化为 42
  2. 声明一个名为 ptr 的指针
  3. 如果输入是 "valid",将 data 的地址赋给 ptr
  4. 如果输入是 "null",将 nullptr 赋给 ptr
  5. 使用 if 语句检查 ptr 是否非空,然后再尝试使用它
  6. 如果指针非空,打印它指向的值
  7. 如果指针为空,打印一条安全提示

请使用以下确切的输出格式:

Value: [value]

对于空指针,请使用以下格式:

Pointer is null - cannot dereference

亲手试试

#include <iostream>
#include <string>
using namespace std;

int main() {
    // 读取输入
    string input;
    cin >> input;
    
    // 声明变量 data
    int data = 42;
    
    // TODO: 在这里编写你的代码
    // 声明一个名为 ptr 的指针
    // 检查输入,并为 ptr 赋予合适的值
    // 使用 if 语句安全地检查和使用指针
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C++ 在线编译器