o mam lepszy przykład *(char*)0 = 0;
godzina gadania o jednej linijce.
(char*)0 //to wskaźnik na adres pamięci 0
=0 // przypisujesz zero do wskaźnika na adres pamięci 0
*( // zwracasz przypisany adres zero do wskaźnika 0
czy ty próbujesz zapisać wartość 0 do adresu pamięci 0? To spowoduje błąd wykonania. Bo adres 0 jest zarezerwowany do wskaźnika nullptr
i nie jest dostępny dla programów. No chyba, że chcesz sprawdzić obsługę błędów? Aha i wskaźnik nullptr
nie jest tym samym co NULL
;
NULL - jest to makro zdefiniowane w C++ - domyślnie ma wartość ZERO (0) w kontekście liczby i daje to wskaźnik o wartości zero czyli brak adresu dla tej zmiennej. NULL jest stałą wskaźnika zerowego jak i stałą arytmetyczną i to może stwarzać problem jeżeli przekaże się to do funkcji
nullptr - jest to zarezerwowany wskaźnik o adresie ZERO (0) do którego nie ma dostępu żaden program i nie można tam nic zapisać. Jest to wskaźnik i zostanie wskaźnikiem. Zapisanie cokolwiek do tej zmiennej skutkuje błędem. Nie da się porównać nullptr
z typem całkowitym np NULL
lub 0
i nie da się go przekształcić
null - jest wartością, a nullptr
jest wskaźnikiem, null
używany jest do reprezentowania braku wartości ZERO(0) w kontekście liczby, a nullptr
służy do reprezentacji braku adresu w pamięci