Wskaźniki zerowe
Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 4 z 56.
Gdy deklarujesz wskaźnik, nie wskazuje on automatycznie na nic konkretnego. Niezainicjalizowany wskaźnik zawiera losowe adresy pamięci, co może prowadzić do poważnych błędów, jeśli spróbujesz go użyć. Właśnie dlatego wskaźniki null są niezbędne do bezpiecznego programowania.
Wskaźnik pusty to wskaźnik, który jawnie wskazuje na nic. We współczesnym C++ tworzysz pusty wskaźnik, inicjalizując go wartością nullptr:
int* ptr = nullptr; // ptr jest teraz wskaźnikiem pustymSłowo kluczowe nullptr oznacza, że wskaźnik nie wskazuje żadnego prawidłowego obszaru pamięci. Jest to znacznie bezpieczniejsze niż pozostawienie wskaźnika niezainicjalizowanego, ponieważ możesz sprawdzić, czy wskaźnik ma wartość null, zanim spróbujesz go wyłuskać.
Przed użyciem dowolnego wskaźnika sprawdź za pomocą prostego warunku if, czy nie jest równy null:
if (ptr != nullptr) {
// Można tu bezpiecznie użyć *ptr
int value = *ptr;
}Ta praktyka zapobiega awariom programu spowodowanym dostępem do nieprawidłowych lokalizacji pamięci. Zawsze inicjalizuj wskaźniki wartością nullptr podczas ich deklarowania i sprawdzaj, czy nie są równe null, zanim je wyłuskasz.
Wyzwanie
ŁatwyUtwórz program, który demonstruje bezpieczne używanie wskaźników, sprawdzając, czy wskaźniki mają wartość null, zanim zostaną wyłuskane.
Dane wejściowe będą miały następującą postać:
- Ciąg znaków, który będzie równy
"valid"lub"null"
Twój program powinien:
- Zadeklarować zmienną całkowitą o nazwie
datai zainicjalizować ją wartością42 - Zadeklarować wskaźnik o nazwie
ptr - Jeśli dane wejściowe to
"valid", przypisać adres zmiennejdatado wskaźnikaptr - Jeśli dane wejściowe to
"null", przypisaćnullptrdo wskaźnikaptr - Użyć instrukcji if, aby sprawdzić, czy wskaźnik
ptrnie ma wartości null, zanim zostanie użyty - Jeśli wskaźnik nie ma wartości null, wypisać wartość, na którą wskazuje
- Jeśli wskaźnik ma wartość null, wypisać komunikat o bezpieczeństwie
Użyj dokładnie następującego formatu wyjściowego:
Value: [value]W przypadku wskaźników null użyj tego formatu:
Pointer is null - cannot dereferenceSpróbuj swoich sił
#include <iostream>
#include <string>
using namespace std;
int main() {
// Wczytaj dane wejściowe
string input;
cin >> input;
// Zadeklaruj zmienną data
int data = 42;
// TODO: Napisz tutaj swój kod
// - Zadeklaruj wskaźnik o nazwie ptr
// - Sprawdź dane wejściowe i przypisz odpowiednią wartość do ptr
// - Użyj instrukcji if, aby bezpiecznie sprawdzić wskaźnik i go użyć
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 przepływ programu
1Wskaźniki i pamięć
Czym jest wskaźnik?Operator pobrania adresuOperator dereferencjiWskaźniki zeroweWskaźniki i tabliceDynamiczne zarządzanie pamięcią za pomocą „new”Zwalnianie pamięci za pomocą „delete”Podsumowanie — ćwiczenia ze wskaźnikami2Wektory (tablice dynamiczne)
Wprowadzenie do std::vectorTworzenie wektoraDodawanie elementówDostęp do elementówRozmiar wektoraIterowanie za pomocą pętli forPętla for oparta na zakresieUsuwanie elementówPodsumowanie — operacje na wektorach5Projekt: Narzędzie do zarządzania zapasami
Konfiguracja projektuDodawanie i aktualizowanie produktów3Projekt: narzędzie do listy zadań
Przegląd projektuDodawanie zadaniaPoćwicz samodzielnie: Kompilator C++ online