Menu
CoddyTech

Нулевые указатели

Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 4 из 56.

Когда вы объявляете указатель, он не начинает сам по себе указывать на что-то осмысленное. Неинициализированный указатель содержит случайный адрес памяти, и попытка его использовать может привести к серьёзным ошибкам. Здесь и нужны нулевые указатели: без них не обойтись в безопасном программировании.

Нулевой указатель — это указатель, который явно ни на что не указывает. В современном C++ нулевой указатель создают, инициализируя его значением nullptr:

int* ptr = nullptr;  // теперь ptr — нулевой указатель

Ключевое слово nullptr означает, что указатель не указывает ни на какую допустимую область памяти. Это гораздо безопаснее, чем оставлять указатель неинициализированным, ведь перед разыменованием можно проверить, не нулевой ли он.

Прежде чем использовать указатель, убедитесь с помощью простого оператора if, что он не нулевой:

if (ptr != nullptr) {
    // здесь *ptr можно безопасно использовать
    int value = *ptr;
}

Эта привычка защищает программу от сбоев из-за обращения к недопустимым адресам памяти. Всегда инициализируйте указатели значением nullptr при объявлении и проверяйте, не нулевые ли они, перед разыменованием.

challenge icon

Задание

Легко

Создайте программу, которая показывает безопасную работу с указателями: перед разыменованием она проверяет, не нулевой ли указатель.

На вход будет подано:

  • Строка: либо "valid", либо "null"

Ваша программа должна:

  1. Объявить целочисленную переменную с именем data и инициализировать её значением 42
  2. Объявить указатель с именем ptr
  3. Если на входе "valid", присвоить ptr адрес data
  4. Если на входе "null", присвоить ptr значение nullptr
  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-statement для безопасной проверки и использования указателя
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор C++