В C NULL е символна константа, която винаги сочи към несъществуваща точка в паметта. Въпреки че много програмисти го третират като 0, това е опростяване, което може да ви спъне по -късно. Най -добре е директно да проверите указателите си спрямо NULL и да използвате 0 в други контексти. Това поддържа кода ви чист и лесен за разбиране, тъй като ще знаете, че работите с указатели всеки път, когато видите NULL.
Стъпки
Част 1 от 2: Извършване на нулева проверка
Стъпка 1. Използвайте стандартния нулев код за проверка
По -долу е най -очевидният начин да напишете нулев чек. Ще използваме птр в тази статия като име на показалеца, който проверявате.
-
ако (ptr == NULL)
{
// код, ако показалецът е NULL
} else {
// код, ако не е NULL
}
Стъпка 2. Тествайте за всякаква стойност, освен NULL
Понякога е по -удобно вместо това да се тества за неравенство. Тук няма изненади:
-
if (ptr! = NULL) {
// код, ако не е NULL
}
Стъпка 3. Първо напишете NULL, за да избегнете грешки (по избор)
Основният недостатък на метода PTR == NULL е възможността вместо това случайно да въведете ptr = NULL, като присвоите стойността NULL на този показалец. Това може да причини силно главоболие. Тъй като тестването за (не) равенство третира операндите симетрично, можете да получите точно същия резултат чрез писане ако (NULL == ptr) вместо. Това е по-устойчиво на печатни грешки, тъй като случайно NULL = ptr създава проста грешка при компилиране.
Това изглежда малко неудобно за някои програмисти, но е напълно валидно. Кой подход ще използвате зависи само от личните предпочитания и от това колко добър е вашият компилатор при откриването на грешката if (ptr = NULL)
Стъпка 4. Проверете дали променливата е истина
Една проста ако (ptr) проверява дали ptr е ИСТИНА. Той ще върне FALSE, ако ptr е NULL, или ако ptr е 0. Разграничението няма значение в много случаи, но имайте предвид, че те не са идентични във всички архитектури.
Обратното на това е ако (! ptr), което ще върне TRUE, ако ptr е FALSE.
Част 2 от 2: Избягване на грешки
Стъпка 1. Задайте показалец, преди да проверите за NULL
Една често срещана грешка е да се приеме, че новосъздаденият показалец има стойност NULL. Това не е истина. Неназначеният показалец все още сочи към адрес на паметта, само не този, който сте посочили. Обичайна практика е да зададете новосъздадени или ново освободени указатели на NULL, за да сте сигурни, че не използвате случайно този безполезен адрес.
-
Избягвайте тази грешка:
char *ptr;
ако (ptr == NULL)
{
// Това ще върне FALSE. На показалеца е присвоена валидна стойност.
}
-
Вместо това напишете:
char *ptr = NULL; // Това присвоява показалеца на NULL
ако (ptr == NULL)
{
// Това ще върне TRUE, ако показалецът не е преназначен.
}
Стъпка 2. Обърнете внимание на функциите, които биха могли да върнат NULL
Ако функция може да върне NULL, помислете дали това е възможно и дали това би причинило проблеми по -късно във вашия код. Ето пример за функцията malloc, използваща нулева проверка (ако (ptr)), за да се гарантира, че обработва само указатели с валидни стойности:
-
int * ptr = malloc (N * sizeof (int));
if (ptr) {
int i;
за (i = 0; i <N; ++ i)
ptr = i;
}
Стъпка 3. Разберете, че NULL е 0, но винаги трябва да използвате NULL вместо 0, когато работите с указатели за по -голяма яснота
Исторически C представлява NULL като числото 0 (тоест 0x00). В днешно време това може да стане малко по -сложно и варира в зависимост от операционната система. Обикновено можете да проверите за NULL с помощта ptr == 0, но има ъглови случаи, при които това може да причини проблем. Може би по -важното е, че използването на NULL прави очевидно, че работите с указатели за други хора, които четат вашия код.