C ma funkcję, która dezorientuje początkujących, ale nadal sprawia, że złożone systemy działają. Możesz wskazać dziesiątki wskaźników na ten sam adres pamięci.
Rozważmy prostą liczbę całkowitą „i”. Możesz zadeklarować trzy wskaźniki – p, q i r – i powiązać je wszystkie z nimi.
To nie magia. To jest po prostu kopiowanie adresu. Kiedy napiszesz r = p, kompilator kopiuje adres przechowywany w p do r. To samo dzieje się z q.
Teraz „i” ma cztery imiona. To jest „ja”. To jest *p. To jest *q. To jest *r.
Nie ma w tym przypadku żadnego sztywnego limitu. Możesz mieć setki wskaźników wskazujących na ten sam fragment pamięci RAM. Każda z nich jest osobną zmienną w kodzie, ale wszystkie wskazują to samo miejsce w pamięci.
Dlatego zmiany dokonane za pomocą jednego wskaźnika wpływają na wszystkie pozostałe. Czy zmieniasz *p? Wartość pod tym adresem zmieni się także dla q i r. Jest to bezpośredni dostęp do tych samych danych.
Dlaczego to jest ważne? Ponieważ pozwala na tworzenie aliasów. Twój program może przeglądać te same dane przez różne soczewki. Jeden wskaźnik może traktować je jako strukturę (struct), a drugi jako tablicę bajtów. Dane się nie zmieniają. Zmienia się ich interpretacja.
Ta elastyczność jest potężna. Ale tu właśnie leżą błędy. Jeśli stracisz kontrolę nad tym, gdzie wskazuje każdy wskaźnik, możesz przypadkowo nadpisać dane, których nie zamierzałeś zmieniać. Ale na razie pamiętaj: wskaźniki to tylko adresy. Adresy można oddzielić.




















