C pozwala stworzyć zarówno chaos, jak i przejrzystość za pomocą wskaźników. To zależy od tego, jak na to spojrzeć. Język umożliwia dowolną liczbę wskaźników wskazujących ten sam adres pamięci. To nie jest błąd. To jest funkcja.
Rozważ „ja”. Zadeklaruj p, q i r jako wskaźniki do liczb całkowitych. Wypisz je wszystkie za pomocą „i”. Kod wygląda następująco:
Całkiem proste. Ale co się dzieje pod maską?
Wskaźniki to tylko adresy
W powyższym przykładzie „r” nie wskazuje na „p”. Wskazuje na wszystko, na co wskazuje „p”. Mianowicie na i.
Kiedy przypiszesz jeden wskaźnik do drugiego, adres zostanie skopiowany. Wartość po prawej stronie zostaje przeniesiona do zmiennej po lewej stronie. Po wykonaniu „i” ma cztery nazwy. „ja”. *p. *q. *r.
Są to różne etykiety dla tego samego fragmentu pamięci RAM. Możesz utworzyć dowolną liczbę wskaźników. Ograniczeniem jest Twoja pamięć, a nie język.
Dlaczego to jest ważne?
To zachowanie zmienia sposób zarządzania danymi. Jeśli przekażesz wskaźnik do funkcji, wszelkie zmiany dokonane za pomocą tego wskaźnika będą miały wpływ na oryginalną zmienną. Jeśli wiele funkcji przechowuje wskaźniki pod tym samym adresem, wszystkie widzą te same zmiany.
Stwarza to ogólny stan. Przydatne do buforowania. Stracenie kontroli nad tym, kto i gdzie nagrywa, jest niebezpieczne.
Nie ma ograniczeń co do liczby wskaźników, które mogą przechowywać i wskazywać ten sam adres.
Ta elastyczność jest potężna. Jest to również złożone. Jeden wskaźnik zmienia wartość. Wszyscy inni natychmiast to widzą. Nie wymaga synchronizacji. Wystarczy bezpośredni dostęp do pamięci.
Pomyśl o debugowaniu. Jeśli zmienna zmieni się nieoczekiwanie, sprawdź wszystkie wskaźniki. Każdy z nich może być winowajcą. Wszyscy mają tę samą siłę. I ta sama odpowiedzialność.
To nie jest skomplikowana logika. Jest to prosta arytmetyka wskaźników. Ale konsekwencje rozciągają się na cały program. Jeden adres. Wiele imion. Wszyscy są połączeni.
























