Wskaźniki 133
Operator dostępu pośredniego ( * ) jest używany w dwóch różnych wariantach: deklaracji i dostępu. Kiedy wskaźnik jest deklarowany, gwiazdka oznacza, że nie jest on zmienną danego typu, lecz właśnie wskaźnikiem na taką zmienną. Np.:
unsigned short * pWiek =0; // stwórz wskaźnik na
**unsigned short int
Kiedy wykorzystujemy wskaźnik do odczytania (lub zmiany) wartości zmiennej, to gwiazdka oznacza, że nie chcemy adresu zmiennej lecz wartość przechowywaną pod tym adresem. Np.:
♦pWiek =5; // przypisz 5 do wartości wskazywanej przez pWiek
Pamiętaj, że symbol ( * ) jest używany również jako operator mnożenia. Kompilator, na podstawie kontekstu, decyduje, który operator ma wykorzystać.
Bardzo ważne jest, aby odróżniać wskaźnik, adres, który ten wskaźnik przechowuje i wartość przechowywaną pod adresem zawartym we wskaźniku. Wiele nieporozumień wynika z nieprawidłowej interpretacji i błędnego rozumienia tych trzech różnych terminów.
Rozważmy następujący przykład: int zmienna = 5;
int *pWskaznik = (zmienna;
zmienna jest zadeklarowana jako int i inicjalizowana wartością 5. pWskaznik
jest zadeklarowany jako wskaźnik na zmienną typu int i jest inicjalizowany adresem zmiennej zmienna. pWskaznik (jak sama nazwa wskazuje) jest wskaźnikiem. Adres przechowywany przez pWskaznik jest adresem zmiennej zmienna. Wartość pod adresem przechowywanym przez pWskaznik jest równa 5. Rysunek 9.3. schematycznie pokazuje reprezentację zmiennych pWskaznik i zmienna.
Reprezentacji
zmiennych w pamięci Nazwa
zmiennej
-1-1-1- 0000 0000 |
I I I I 0000 0000 0000 0110 | |
0000 0101 |
0000 0000 0000 0101 | |
5 1 1 1 |
i |
101 1 1 1 1 |
100 101 102 103 Adres komórki pamięci |
104 |
105 106 107 108 109 |
Operator dostępu pośredniego ( * ) jest używany w dwóch różnych wariantach: deklaracji i dostępu. Kiedy wskaźnik jest deklarowany, gwiazdka oznacza, że nie jest on zmienną danego typu, lecz właśnie wskaźnikiem na taką zmienną. Np.:
unsigned short * pWiek =0; // stwórz wskaźnik na
"■•unsigned short int
Kiedy wykorzystujemy wskaźnik do odczytania (lub zmiany) wartości zmiennej, to gwiazdka oznacza, że nie chcemy adresu zmiennej lecz wartość przechowywaną pod tym adresem. Np.:
*pWiek =5; // przypisz 5 do wartości wskazywanej przez pWiek
Pamiętaj, że symbol ( * ) jest używany również jako operator mnożenia. Kompilator, na podstawie kontekstu, decyduje, który operator ma wykorzystać.
Bardzo ważne jest, aby odróżniać wskaźnik, adres, który ten wskaźnik przechowuje i wartość przechowywaną pod adresem zawartym we wskaźniku. Wiele nieporozumień wynika z nieprawidłowej interpretacji i błędnego rozumienia tych trzech różnych terminów.
Rozważmy następujący przykład: int zmienna = 5;
int *pWskaznik = fizmienna;
zmienna jest zadeklarowana jako int i inicjalizowana wartością 5. pWskaznik jest zadeklarowany jako wskaźnik na zmienną typu int i jest inicjalizowany adresem zmiennej zmienna. pWskaznik (jak sama nazwa wskazuje) jest wskaźnikiem. Adres przechowywany przez pWskaznik jest adresem zmiennej zmienna. Wartość pod adresem przechowywanym przez pWskaznik jest równa 5. Rysunek 9.3. schematycznie pokazuje reprezentację zmiennych pWskaznik i zmienna.
Rysunek 9.3
Reprezentacji zmiennych w pamięci
zmienna
pWskaznik
Nazwa
zmiennej i |
r l |
' | |
I 1 I I 0000 0000 |
1 1 I 1 1 0000 0000 0000 0110 | ||
0000 0101 |
0000 0000 0000 0101 | ||
5 |
101 | ||
_1_ |
_1_1_1_ |
_I_1_ |
_1_1_1_ |
100 101 102 103 104 105 106 107 108 109
Adres komórki pamięci