W C ta sama lokalizacja pamięci może mieć wiele aliasów. Możesz zadeklarować wiele wskaźników i mieć je wszystkie odnoszące się do tej samej zmiennej. Nie jest to tylko cecha języka, ale fundamentalna cecha, która zmienia podejście do zarządzania pamięcią i dostępu do danych.
Rozważ ten scenariusz. Potrzebujesz wielu odniesień do tej samej zmiennej całkowitej. Możesz zadeklarować je wszystkie i natychmiast je połączyć.
W tym fragmencie kodu wszystkie „p”, „q” i „r” są wskaźnikami do liczb całkowitych. Wszystkie wskazują na „i”. Przypisanie r = p nie kopiuje wartości i. Kopiuje adres zapisany w p. Ponieważ p zawiera adres i, r zawiera teraz także adres i.
Jedna zmienna, wiele nazw
Po wykonaniu kodu w pamięci znajduje się jedna zmienna całkowita „i”. Dostęp do tych danych można jednak uzyskać na cztery sposoby.
i: Nazwa zmiennej źródłowej.*p: Wartość pod adresem przechowywanym wp.*q: Wartość pod adresem zapisanym wq.*r: Wartość pod adresem przechowywanym wr.
Są identyczne. Zmień „i”. *p ulegnie zmianie. Zmień *q. „ja” się zmienię. Dane znajdują się pod jednym adresem. Wskaźniki to tylko etykiety.
Nie ma sztywnego limitu liczby wskaźników, które mogą przechowywać ten sam adres. Można je łączyć w nieskończoność. Konstrukcja a = &i; b = a; do = b; d = c; działa w ten sam sposób. Każde przypisanie kopiuje wartość wskaźnika. Nie tworzy nowej kopii danych.
„Dowolna liczba wskaźników może wskazywać ten sam adres.”
Ta funkcja jest przydatna podczas przekazywania odniesień między funkcjami lub budowania powiązanych struktur. Pozwala na oszczędne wykorzystanie pamięci. Jednak niesie to również ryzyko. Jeśli usuniesz odwołanie do jednego z tych wskaźników, uzyskasz dostęp do tych samych bajtów bazowych. Błąd w jednym aliasie będzie miał wpływ na wszystkie pozostałe. Ale przy prawidłowym użyciu ta funkcja jest standardową praktyką w C.




























