W C możesz robić rzeczy, które na pierwszy rzut oka mogą wydawać się zagmatwane. Możliwe jest posiadanie wielu wskaźników wskazujących na tę samą lokalizację pamięci. To nie jest błąd. Jest to cecha języka.
Rozważmy następującą sytuację. Deklarujesz zmienną całkowitą „i”. Następnie deklarujesz trzy wskaźniki: p, q i r.
Spójrz, co się tutaj dzieje. p pobiera adres i. q robi to samo. r nie daje bezpośredniego dostępu do i. Po prostu kopiuje adres zapisany w p. Ponieważ p wskazuje na i, r również zaczyna wskazywać na i.
Po wykonaniu tych linii nie będziesz mieć trzech oddzielnych zmiennych rozproszonych po całej pamięci. Masz jedną zmienną z czterema aliasami.
ja*p*q*r
Wszystkie reprezentują to samo.
Dzieje się tak, ponieważ przypisanie wskaźnika jest kopiowaniem wartości adresu. Adres po prawej stronie przypisania zostaje przeniesiony do zmiennej po lewej stronie. Nie ma głębokiego kopiowania danych. Przesyłany jest tylko adres pamięci.
Nie ma tutaj żadnych ograniczeń. Możesz połączyć ze sobą dowolną liczbę wskaźników. a = b; do = b; d = c; – to nie ma znaczenia. Wszystkie wskazują tę samą lokalizację w pamięci RAM.
Nie ma ograniczeń co do liczby wskaźników, które można przechowywać i tym samym wskazywać na ten sam adres.
Dlaczego to jest ważne? Oznacza to, że możesz swobodnie udostępniać linki. Możesz tworzyć aliasy danych do wykorzystania w różnych częściach kodu. Można tworzyć złożone struktury danych, w których węzły odnoszą się do siebie.
Oznacza to również, że konieczna jest ostrożność. Zmień *p na 5. Co się dzieje z „ja”? Będzie „5”. Zmienić *q? „ja” zmienię się ponownie. Wszystkie aliasy widzą tę samą aktualizację.
To są podstawy C. Ale jest to potężne narzędzie. I niebezpieczne, jeśli stracisz kontrolę nad tym, który wskaźnik wskazuje na co.






































