W C możesz utworzyć „dżem” wskaźników wskazujących tę samą lokalizację pamięci. To nie jest błąd. Jest to cecha języka. Możesz zadeklarować dowolną liczbę wskaźników i wszystkie będą odnosić się do tej samej zmiennej.

Rozważ ten scenariusz. Masz zmienną całkowitą „i”. Masz także trzy wskaźniki: p, q i r. Ustawiasz p tak, aby wskazywało na i. Następnie ustawiasz q tak, aby wskazywało i. Na koniec ustawiasz „r” tak, aby wskazywało miejsce, w którym wskazuje „p”.

W tym fragmencie kodu „r” wskazuje na to samo, co „p”, a mianowicie na „i”. Operator przypisania kopiuje adres z prawej strony na lewą. Nie kopiuje wartości, kopiuje adres.

Po wykonaniu kodu zmienna i ma cztery nazwy. Samo „i”, „p”, „ q” i „*r”.

Nie ma ograniczeń co do liczby wskaźników, które mogą przechowywać ten sam adres. Można je przenosić jeden na drugi w łańcuchu, kopiować lub jednocześnie kierować w jeden obszar.

Dlaczego to jest ważne? Jest to ważne, ponieważ zmienia sposób myślenia o pamięci. Wskaźnik to po prostu etykieta adresu. Jeśli wiele etykiet wskazuje tę samą lokalizację, wszystkie widzą te same dane. Zmień dane poprzez *p*q również zobaczysz te zmiany.

Ta elastyczność jest potężna. Ona jest również niebezpieczna. Jedna literówka w przypisaniu wskaźnika i nadpiszesz dane, których nie zamierzałeś zmieniać. Ale na razie zrozum, że wskaźniki są elastyczne. Nie posiadają pamięci, jedynie na nią wskazują. Wiele wskaźników może wskazywać to samo miejsce bez konfliktów.