Нулевые указатели
Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 4 из 56.
Когда вы объявляете pointer, он автоматически ни на что осмысленное не указывает. Неинициализированный pointer содержит случайные адреса памяти, что может привести к серьёзным ошибкам, если попытаться его использовать. Именно здесь null-указатели становятся необходимыми для безопасного программирования.
Нулевой указатель — это указатель, который явно указывает в никуда. В современном C++ нулевой указатель создаётся инициализацией с помощью nullptr:
int* ptr = nullptr; // ptr теперь является нулевым указателемКлючевое слово nullptr указывает, что указатель не указывает ни на одну допустимую область памяти. Это гораздо безопаснее, чем оставлять указатель неинициализированным, поскольку можно проверить, является ли указатель null, прежде чем пытаться разыменовать его.
Перед использованием любого pointer следует проверить, что он не null, с помощью простого оператора if:
if (ptr != nullptr) {
// Здесь безопасно использовать *ptr
int value = *ptr;
}Эта практика предотвращает сбой вашей программы из-за обращения к недопустимым областям памяти. Всегда инициализируйте pointer значением nullptr при их объявлении и выполняйте check на null перед операцией dereference.
Задание
ЛегкоСоздай программу, демонстрирующую безопасное использование указателей, проверяя указатели на null перед их разыменованием.
Будут предоставлены следующие входные данные:
- string, которая будет либо
"valid", либо"null"
Твоя программа должна:
- Объявить целочисленную variable с именем
dataи инициализировать её значением42 - Объявить pointer с именем
ptr - Если входные данные равны
"valid", assign адресdataпеременнойptr - Если входные данные равны
"null", assignnullptrпеременнойptr - Использовать if-statement, чтобы проверить, что
ptrне равен null, прежде чем пытаться его использовать - Если pointer не равен null, вывести значение, на которое он указывает
- Если pointer равен null, вывести сообщение о безопасности
Используй следующий точный формат вывода:
Value: [value]Для указателей null используй этот формат:
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;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаровПотренируйтесь самостоятельно: Онлайн-компилятор C++