Przyjrzyjmy się, jak wskaźniki są używane w języku programowania C.
Zajmiemy się dwiema zmiennymi:
aptr
Spotkamy się również z dwoma kluczowymi znakami:
- where would return the address location of variable - where means follow the memory address stored in ptr and set that location to 8
Załóżmy, że a
znajduje się pod adresem 0x8130 w pamięci i ptr
pod adresem 0x8134; załóżmy też, że jest to maszyna 32-bitowa, w której int jest 32-bitowy rozmiar. Poniżej podano, co znajdowałoby się w pamięci po wykonaniu następującego fragmentu kodu:
int a = 5;int *ptr = NULL;
Adres | Treść |
---|---|
0x8130 | 0x00000005 |
0x8134 | 0x00000000 |
(Pokazany tutaj wskaźnik NULL to 0x00000000.) Po przypisaniu adresu a
do ptr
:
ptr = &a;
zwraca następujące wartości pamięci:
Adres | Spis treści |
---|---|
0x8130 | 0x00000005 |
0x8134 | 0x00008130 |
Następnie poprzez wyłuskiwanie ptr
przez kodowanie:
*ptr = 8;
komputer weźmie zawartość ptr
(czyli 0x8130), „zlokalizuj” ten adres i przypisz 8 do tej lokalizacji, uzyskując następującą pamięć:
Adres | Treść |
---|---|
0x8130 | 0x00000008 |
0x8134 | 0x00008130 |
Oczywiście, dostęp do a
zwróci wartość 8, ponieważ poprzednia instrukcja modyfikowała zawartość
za pomocą wskaźnika ptr
.