Указатели NULL
Часть раздела Logic & Flow путешествия по C на Coddy — урок 5 из 63.
Иногда вам нужно объявить указатель, но у вас нет подходящего адреса памяти, чтобы сразу его присвоить. В таких ситуациях важно инициализировать указатель специальным значением, называемым NULL.
NULL-указатель — это указатель, который не указывает ни на какой допустимый адрес памяти. В языке C NULL обычно определяется как 0 или (void*)0. Когда вы инициализируете указатель значением NULL, вы явно заявляете, что в данный момент он не указывает ни на что полезное.
int *ptr = NULL; // Инициализируем указатель значением NULL
printf("%p", ptr); // Это выведет 0 или (nil)Инициализация указателей значением NULL считается хорошей практикой программирования, поскольку это предотвращает содержание в указателе случайных «мусорных» значений. Неинициализированный указатель может содержать любой случайный адрес памяти, что может привести к непредсказуемому поведению, если вы случайно попытаетесь его использовать.
Вы можете проверить, является ли указатель NULL, перед его использованием, что помогает предотвратить сбои и делает ваш код более надежным. Эта проверка безопасности становится особенно важной по мере усложнения ваших программ.
Задание
ЛегкоНапишите программу на языке C, которая демонстрирует правильную инициализацию и проверку указателей на NULL. Ваша программа должна:
- Объявить указатель на целое число с именем
safe_ptrи инициализировать его значением NULL - Объявить указатель на символ с именем
char_ptrи инициализировать его значением NULL - Проверить, является ли
safe_ptrравным NULL, используя оператор if, и вывести "safe_ptr is NULL", если это так - Проверить, является ли
char_ptrравным NULL, используя оператор if, и вывести "char_ptr is NULL", если это так - Вывести адрес памяти, хранящийся в
safe_ptr, используяprintfсо спецификатором формата%p - Вывести адрес памяти, хранящийся в
char_ptr, используяprintfсо спецификатором формата%p
Ваш вывод должен отображать результаты в следующем формате:
safe_ptr is NULL
char_ptr is NULL
safe_ptr address: [address]
char_ptr address: [address]Фактические адреса памяти будут отображаться как 0, (nil) или аналогичное представление NULL в зависимости от вашей системы, но формат и метки должны точно соответствовать показанным выше.
Шпаргалка
NULL-указатель — это указатель, который не указывает ни на какой допустимый адрес памяти. В языке C NULL обычно определяется как 0 или (void*)0.
Инициализируйте указатели значением NULL, чтобы предотвратить появление случайных «мусорных» значений:
int *ptr = NULL; // Инициализация указателя значением NULL
printf("%p", ptr); // Это выведет 0 или (nil)Проверяйте, является ли указатель NULL, перед его использованием, чтобы предотвратить сбои программы:
if (ptr == NULL) {
// Безопасная обработка случая с NULL
}Попробуйте сами
#include <stdio.h>
int main() {
// TODO: Напишите свой код здесь
// Объявите и инициализируйте свои указатели
// Проверьте, являются ли указатели NULL
// Выведите требуемый результат
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции