Wskaźniki NULL
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 5 z 63.
Czasami musisz zadeklarować wskaźnik, ale nie masz od razu prawidłowego adresu pamięci, który możesz mu przypisać. W takich sytuacjach ważne jest, aby zainicjalizować wskaźnik specjalną wartością o nazwie NULL.
Wskaźnik NULL to wskaźnik, który nie wskazuje żadnego prawidłowego adresu pamięci. W C NULL jest zazwyczaj definiowane jako 0 lub (void*)0. Inicjalizując wskaźnik wartością NULL, wyraźnie określasz, że obecnie nie wskazuje on niczego użytecznego.
int *ptr = NULL; // Zainicjalizuj wskaźnik wartością NULL
printf("%p", ptr); // To wypisze 0 lub (nil)Inicjalizowanie wskaźników wartością NULL jest uznawane za dobrą praktykę programistyczną, ponieważ zapobiega przechowywaniu przez wskaźnik przypadkowych, bezwartościowych wartości. Niezainicjalizowany wskaźnik może zawierać dowolny przypadkowy adres pamięci, co może prowadzić do nieprzewidywalnego działania, jeśli przypadkowo spróbujesz go użyć.
Możesz sprawdzić, czy wskaźnik ma wartość NULL, zanim go użyjesz, co pomaga zapobiegać awariom i zwiększa niezawodność Twojego kodu. Takie sprawdzenie bezpieczeństwa staje się szczególnie ważne, gdy Twoje programy stają się bardziej złożone.
Wyzwanie
ŁatwyNapisz program w C, który demonstruje prawidłową inicjalizację wskaźników NULL i sprawdzanie ich wartości. Twój program powinien:
- zadeklarować wskaźnik do liczby całkowitej o nazwie
safe_ptri zainicjalizować go wartością NULL - zadeklarować wskaźnik do znaku o nazwie
char_ptri zainicjalizować go wartością NULL - sprawdzić, czy
safe_ptrma wartość NULL, używając instrukcji if, i wypisać "safe_ptr is NULL", jeśli tak jest - sprawdzić, czy
char_ptrma wartość NULL, używając instrukcji if, i wypisać "char_ptr is NULL", jeśli tak jest - wypisać adres pamięci przechowywany w
safe_ptr, używającprintfze specyfikatorem formatu%p - wypisać adres pamięci przechowywany w
char_ptr, używającprintfze specyfikatorem formatu%p
Wynik powinien wyświetlać rezultaty w następującym formacie:
safe_ptr is NULL
char_ptr is NULL
safe_ptr address: [address]
char_ptr address: [address]Rzeczywiste adresy pamięci będą wyświetlane jako 0, (nil) lub podobna reprezentacja wartości NULL, zależnie od systemu, ale format i etykiety muszą dokładnie odpowiadać powyższym.
Spróbuj swoich sił
#include <stdio.h>
int main() {
// TODO: Napisz tutaj swój kod
// Zadeklaruj i zainicjalizuj wskaźniki
// Sprawdź, czy wskaźniki mają wartość NULL
// Wypisz wymagany wynik
return 0;
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i sterowanie przepływem
1Podstawy wskaźników
Czym jest wskaźnik?Deklarowanie wskaźnikówOperator pobrania adresu (&)Operator dereferencji (*)Wskaźniki NULLPodsumowanie: podstawy wskaźników4Projekt: Proste narzędzie tekstowe
Przegląd projektuLiczenie znaków2Wskaźniki i tablice
Nazwy tablic jako wskaźnikiElementy tablic — wskaźnikiArytmetyka wskaźnikówPorównywanie wskaźnikówPodsumowanie: przechodzenie po tablicy za pomocą wskaźników5Wskaźniki i funkcje
Przekazywanie przez wartośćPrzekazywanie wskaźników do funkcjiModyfikowanie zmiennych za pomocą wskaźnikówKlasyczny przykład: zamianaPrzekazywanie tablic do funkcjiPowtórka: argumenty wskaźnikowe funkcji8Struktury i wskaźniki
Wskaźniki do strukturOperator strzałki (->)Przekazywanie struktur przez wartośćPrzekazywanie wskaźników do strukturDynamiczna alokacja strukturPodsumowanie: modyfikowanie struktury — wskaźnik11Końcowe zadania powtórkowe
Powtórka: dynamiczne łączenie ciągów znakówPowtórka: tablica strukturPowtórka: licznik częstotliwości słów3Tablice znaków i ciągi znaków
Ciągi znaków jako tablice charZnak końca ciąguWczytywanie ciągu za pomocą scanfUżywanie strlen()Używanie strcpy()Używanie strcat()Używanie strcmp()Podsumowanie: podstawowe funkcje do obsługi ciągów znakówPoćwicz samodzielnie: Kompilator C online