Poznaj C++ w$ godziny0142

Poznaj C++ w$ godziny0142



Wskaźniki 131

Przypisywanie adresu do wskaźnika

Jak już mówiliśmy, każda zmienna ma swój adres. Nawet nie znając konkretnego adresu zmiennej możesz go przypisać do wskaźnika.

Oto przykład. Załóżmy, że mamy zmienną całkowitą typu int o nazwie wiek. Żeby zadeklarować wskaźnik do przechowywania adresu tej zmiennej musisz napisać:

int *pWiek = 0;

Tak wygląda deklaracja wskaźnika pWiek mogącego przechować adres zmiennej całkowitej typu int.

pWiek jest zmienną taką jak każda inna. Kiedy deklarujesz zmienną całkowitą (np. int) to możesz w niej przechowywać wartości całkowite. Kiedy deklarujesz zmienną wskaźnikową, to możesz w niej umieścić adres jakiegoś obiektu w pamięci. W tym przypadku zmienna wskaźnikowa pWiek przechowuje adres zmiennej całkowitej typu int.

Zauważ, że zainicjowaliśmy wskaźnik pWiek wartością 0. Wskaźnik, którego wartość wynosi zero określany jest jako nuli (pusty, nie wskazujący na żaden obiekt). Jeśli nie wiesz jaki adres przypisać do wskaźnika, to przypisz mu wartość zero. Wskaźniki niezainicjowane żadną wartością określane są jako dzikie wskaźniki. Stanowią one potencjalne zagrożenie dla programu, gdyż mogą przechowywać adres dowolnej komórki pamięci (nie wiemy jakiej). Modyfikacja pamięci pod tym adresem może doprowadzić np. do zawieszenia się komputera.


Zawsze inicjalizuj wskaźniki!


Zainicjowaliśmy wskaźnik wartością 0. Musimy teraz przypisać mu adres zmiennej

wiek. Oto przykładowa sekwencja instrukcji, która to realizuje:

unsigned short int wiek = 50;    // stwórz zmienna

unsigned short int * pWiek =0;    // stwórz wskaźnik

pWiek = Swiek;    // wstaw adres do wskaźnika

W pierwszej linii tworzymy zmienną typu unsigned short int i inicjalizujemy ją wartością 50. W drugiej linii deklarujemy pWiek jako wskaźnik na unsigned short int i inicjalizujemy go wartością 0 (nuli). O tym, że pWiek to wskaźnik, mówi nam gwiazdka umieszczona po typie zmiennej i przed jej nazwą.

Trzecia i ostatnia linia przypisuje adres zmiennej wiek do wskaźnika pWiek. Przypisaliśmy adres dzięki operatorowi adresu ( & ). Gdybyśmy zapomnieli o tym operatorze, to do wskaźnika zostałaby przypisana wartość zmiennej wiek (a nie jej adres). Oznacza to, że wskazywałby on na zupełnie inną komórkę pamięci, niż oczekiwaliśmy.

Przypisywanie adresu do wskaźnika

Jak już mówiliśmy, każda zmienna ma swój adres. Nawet nie znając konkretnego adresu zmiennej możesz go przypisać do wskaźnika.

Oto przykład. Załóżmy, że mamy zmienną całkowitą typu int o nazwie wiek. Żeby zadeklarować wskaźnik do przechowywania adresu tej zmiennej musisz napisać:

int *pWiek = 0;

Tak wygląda deklaracja wskaźnika pWiek mogącego przechować adres zmiennej całkowitej typu int.

pWiek jest zmienną taką jak każda inna. Kiedy deklarujesz zmienną całkowitą (np. int) to możesz w niej przechowywać wartości całkowite. Kiedy deklarujesz zmienną wskaźnikową, to możesz w niej umieścić adres jakiegoś obiektu w pamięci. W tym przypadku zmienna wskaźnikowa pWiek przechowuje adres zmiennej całkowitej typu int.

Zauważ, że zainicjowaliśmy wskaźnik pWiek wartością 0. Wskaźnik, którego wartość wynosi zero określany jest jako nuli (pusty, nie wskazujący na żaden obiekt). Jeśli nie wiesz jaki adres przypisać do wskaźnika, to przypisz mu wartość zero. Wskaźniki niezainicjowane żadną wartością określane są jako dzikie wskaźniki. Stanowią one potencjalne zagrożenie dla programu, gdyż mogą przechowywać adres dowolnej komórki pamięci (nie wiemy jakiej). Modyfikacja pamięci pod tym adresem może doprowadzić np. do zawieszenia się komputera.


Zawsze inicjalizuj wskaźniki!


Zainicjowaliśmy wskaźnik wartością 0. Musimy teraz przypisać mu adres zmiennej wiek. Oto przykładowa sekwencja instrukcji, która to realizuje:

unsigned short int wiek =50;    // stwórz zmienna

unsigned short int * pWiek =0;    // stwórz wskaźnik

pWiek = Swiek;    // wstaw adres do wskaźnika

W pierwszej linii tworzymy zmienną typu unsigned short int i inicjalizujemy ją wartością 50. W drugiej linii deklarujemy pWiek jako wskaźnik na unsigned short int i inicjalizujemy go wartością 0 (nuli). O tym, że pWiek to wskaźnik, mówi nam gwiazdka umieszczona po typie zmiennej i przed jej nazwą.

Trzecia i ostatnia linia przypisuje adres zmiennej wiek do wskaźnika pWiek. Przypisaliśmy adres dzięki operatorowi adresu ( & ). Gdybyśmy zapomnieli o tym operatorze, to do wskaźnika zostałaby przypisana wartość zmiennej wiek (a nie jej adres). Oznacza to, że wskazywałby on na zupełnie inną komórkę pamięci, niż oczekiwaliśmy.


Wyszukiwarka

Podobne podstrony:
124 ROZDZIAŁ 17. WSKAŹNIKI określone miejsce w pamięci. A ponieważ funkcja ma swój adres®, to nie ma
Zdrowie w Twoich rękach (9) tein. Jak już mówiliśmy, większość chorób ma obecnie podłoże psychiczne,
Poznaj C++ w$ godziny0148 Wskaźniki 137Dlaczego będziemy wykorzystywać wskaźniki? Jak dotąd, krok po
Poznaj C++ w$ godziny0140 Wskaźniki 129 Wskaźniki 129 13 14 15 16 17 18 cout « "longVar: "
Poznaj C++ w$ godziny0144 Wskaźniki 133 Operator dostępu pośredniego ( * ) jest używany w dwóch różn
Poznaj C++ w$ godziny0146 Wskaźniki 135 Wskaźniki 135 ANALIZA: W tym programie deklarujemy dwie zmie
Poznaj C++ w$ godziny0150 Wskaźniki 139 Jeśli new nie może zarezerwować miejsca na stercie (bądź co
Poznaj C++ w$ godziny0152 Wskaźniki 141 1:    unsigned short
Poznaj C++ w$ godziny0083 Funkcje 69Parametry domyślne Do każdego zadeklarowanego w prototypie i def
Poznaj C++ w$ godziny0097 Proste klasy 83Dostęp do zasobów klasy Jeśli masz zdefiniowany obiekt Kot
DSCN8550 2» Rozdział V. Godzina Polski Z reki przelewa do ręki, Jak gdyby z sita do sita, Wrząc
Poznaj C++ w$ godziny0121 Zaawansowane sterowanie programem 109 W liniach 12-15 wprowadzamy wartości
DSC00735 (8) t H nazywa- °n kiedyś dal mi numer telefonu do siebie, jak już pracował w sowie ^Przyja
Kto był najmądrzejszy z tego opowiadania? (jego syn) Co strugał chłopiec? (drewnianą miskę do ojca,
img165 258 1992, 197). Co więcej, do Gefjon, jak już wiemy, trafiać mają po śmierci wszystkie panny.
Poznaj C++ w$ godziny0215 206Godzina 14 W liniach 34-37 kasowane i odtwarzane są wewnętrzne zmienne

więcej podobnych podstron