ARYTMETYKA WSKAŹNIKÓW 115 Podsumowując, różne wskaźniki to różne typy i nie należy beztrosko rzutować wy- rażeń pomiędzy różnymi typami wskaźnikowymi, bo grozi to nieprzewidywalnymi błę- dami. Do czego służy typ void*? Czasami zdarza się, że nie wiemy, na jaki typ wskazuje dany wskaźnik. W takich przypadkach stosujemy typ void*. Sam void nie znaczy nic, natomiast void* oznacza “wskaźnik na obiekt w pamięci niewiadomego typu”. Taki wskaźnik możemy potem od- nieść do konkretnego typu danych (w języku C++ wymagane jest do tego rzutowania). Na przykład, funkcja malloc zwraca właśnie wskaźnik za pomocą void*. Arytmetyka wskaźników W języku C do wskaźników można dodawać lub odejmować liczby całkowite. Istotne jest jednak, że dodanie do wskaźnika liczby dwa nie spowoduje przesunięcia się w pamięci komputera o dwa bajty. Tak naprawdę przesuniemy się o 2*rozmiar zmiennej. Jest to bardzo ważna informacja! Początkujący programiści popełniają często dużo błędów, związanych z nieprawidłową arytmetyką wskaźników. Zobaczmy na przykład: int *ptr; int a[] = {1, 2, 3, 5, 7}; ptr = &a[0]; Rysunek 17.2: Wskaźnik wskazuje na pierwszą komórkę pamięci Otrzymujemy następującą sytuację: Gdy wykonamy ptr += 2; Rysunek 17.3: Przesunięcie wskaźnika na kolejne komórki wskaźnik ustawi się na trzecim elemencie tablicy.
... zobacz całą notatkę
Komentarze użytkowników (0)