Poznaj C++ w$ godziny0152

Poznaj C++ w$ godziny0152



Wskaźniki 141

1:    unsigned short int    *    pHskaznik    =    naw unsigned short int;

2:    *pHskaznik = 72;

3:    pHskaznik = new unsigned    short    int;

4:    *pWskaznik =84;

W linii 1 tworzymy wskaźnik pHskaznik i przypisujemy mu adres obszaru na stercie. W linii 2 do zarezerwowanego obszaru wstawiamy wartość 72. W linii, do wskaźnika pHskaznik ponownie przypisujemy, nowy adres obszaru na stercie i w linii 4 wstawiamy do tego obszaru wartość 84. Pierwszy obszar, ten z wartością 72 jest nadal zarezerwowany ale już niedostępny, ponieważ wskaźnik, który na niego wskazywał otrzymał nową wartość. Nie ma możliwości odczytania ani zmiany zawartości tego obszaru. Będzie on niepotrzebnie zajmował pamięć aż do zakończenia się programu.

Ten fragment powinien wyglądać tak:

1:    unsigned short int * pHskaznik = new unsigned short int;

2:    *pWskaznik = 72;

3:    delete pHskaznik;

4:    pHskaznik = new unsigned short int;

5:    *pHskaznik = 84;

Teraz pierwszy obszar jest poprawnie zwolniony.


Zawsze gdy wykorzystujesz new pamiętaj, aby w odpowiednim momencie wykorzystać delete (tak jak klamry otwierające i zamykające bloki programu). Ważnym jest, aby pamiętać, który wskaźnik wskazuje na który obszar. Kiedy zarezerwowany na stercie jest już zbędny to należy go zwolnić.


Podsumowanie

Wskaźniki dają ogromne możliwości w pośrednim dostępie do danych. Każda zmienna ma swój adres, który może zostać odczytany za pomocą operatora adresu ( & ). Każdy adres można przechowywać we wskaźniku.

Wskaźniki deklaruje się poprzez podanie typu zmiennej, gwiazdki i nazwy wskaźnika. Każdy wskaźnik powinien być zainicjowany adresem konkretnej zmiennej lub obszaru albo wartością zero (nuli).

Do odczytywania i modyfikacji wartości przechowywanej pod adresem służy operator dostępu pośredniego ( * ). Możesz deklarować wskaźniki jako const co gwarantuje, że nie będzie im można przypisać innego adresu niż zainicjowany. Możesz również zadeklarować wskaźnik na obiekt const. Nie będzie możliwa zmiana tej wartości za pomocą tego wskaźnika.

Żeby stworzyć nowy obiekt na stercie musisz użyć słowa kluczowego new i przypisać otrzymany adres do wskaźnika. Zarezerwowaną pamięć należy zwolnić za pomocą delete. delete zwalnia pamięć, ale nie kasuje wskaźnika. Do takiego wskaźnika możesz ponownie przypisać nowy adres.

1:    unsigned short int    *    pWskaznik    =    new unsigned short int;

2:    ‘pWskaznik = 72;

3:    pWskaznik = new unsigned    short    int;

4:    ‘pWskaznik = 84;

W linii 1 tworzymy wskaźnik pWskaznik i przypisujemy mu adres obszaru na stercie. W linii 2 do zarezerwowanego obszaru wstawiamy wartość 72. W linii, do wskaźnika pWskaznik ponownie przypisujemy, nowy adres obszaru na stercie i w linii 4 wstawiamy do tego obszaru wartość 84. Pierwszy obszar, ten z wartością 72 jest nadal zarezerwowany ale już niedostępny, ponieważ wskaźnik, który na niego wskazywał otrzymał nową wartość. Nie ma możliwości odczytania ani zmiany zawartości tego obszaru. Będzie on niepotrzebnie zajmował pamięć aż do zakończenia się programu.

Ten fragment powinien wyglądać tak:

1:    unsigned short int * pWskaznik = new unsigned short int;

2:    ‘pWskaznik = 72;

3:    delete pWskaznik;

4;    pWskaznik = new unsigned short int;

5:    ‘pWskaznik = 84;

Teraz pierwszy obszar jest poprawnie zwolniony.


Zawsze gdy wykorzystujesz new pamiętaj, aby w odpowiednim momencie wykorzystać delete (tak jak klamry otwierające i zamykające bloki programu). Ważnym jest, aby pamiętać, który wskaźnik wskazuje na który obszar. Kiedy zarezerwowany na stercie jest już zbędny to należy go zwolnić.


Podsumowanie

Wskaźniki dają ogromne możliwości w pośrednim dostępie do danych. Każda zmienna ma swój adres, który może zostać odczytany za pomocą operatora adresu ( & ). Każdy adres można przechowywać we wskaźniku.

Wskaźniki deklaruje się poprzez podanie typu zmiennej, gwiazdki i nazwy wskaźnika. Każdy wskaźnik powinien być zainicjowany adresem konkretnej zmiennej lub obszaru albo wartością zero (nuli).

Do odczytywania i modyfikacji wartości przechowywanej pod adresem służy operator dostępu pośredniego ( * ). Możesz deklarować wskaźniki jako const co gwarantuje, że nie będzie im można przypisać innego adresu niż zainicjowany. Możesz również zadeklarować wskaźnik na obiekt const. Nie będzie możliwa zmiana tej wartości za pomocą tego wskaźnika.

Żeby stworzyć nowy obiekt na stercie musisz użyć słowa kluczowego new i przypisać otrzymany adres do wskaźnika. Zarezerwowaną pamięć należy zwolnić za pomocą delete. delete zwalnia pamięć, ale nie kasuje wskaźnika. Do takiego wskaźnika możesz ponownie przypisać nowy adres.


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0099 Proste klasy85 unsigned int Waga; void Miaucz(); Kot.Frisky; Frisky.Wiek =
Poznaj C++ w$ godziny0140 Wskaźniki 129 Wskaźniki 129 13 14 15 16 17 18 cout « "longVar: "
Poznaj C++ w$ godziny0142 Wskaźniki 131Przypisywanie adresu do wskaźnika Jak już mówiliśmy, każda zm
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$ godziny0148 Wskaźniki 137Dlaczego będziemy wykorzystywać wskaźniki? Jak dotąd, krok po
Poznaj C++ w$ godziny0150 Wskaźniki 139 Jeśli new nie może zarezerwować miejsca na stercie (bądź co
Poznaj C++ w$ godziny0042 26 Godzina 3 i unsigned dla liczb bez znaku. Liczby całkowite (short, long
Poznaj C++ w$ godziny0046 30 Godzina 3typedef
Poznaj C++ w$ godziny0048 32 Godzina 3 32 Godzina 3 ANALIZA: W linii 4 deklarowana jest zmienna mala
Poznaj C++ w$ godziny0047 Zmienne i stałe 31Kiedy używać short a kiedy long Jednym z problemów progr
Poznaj C++ w$ godziny0089 Funkcje 75 Kiedy wartość jest odkładana na stos, to jest umieszczana w kom
Poznaj C++ w$ godziny0098 84 Godzina 6 class Kot { unsigned int jegoWiek; unsigned int jegoWaga;&nbs
Poznaj C++ w$ godziny0137 IIIZarządzanie pamięcią Godzina 9 Wskaźniki 10    Zaawansow
Poznaj C++ w$ godziny0139 128 Godzina 9 Stop. Przeczytaj tę definicję jeszcze raz. Wskaźnik jest zmi
Poznaj C++ w$ godziny0145 134 Godzina 9Manipulowanie danymi za pomocą wskaźników Jeśli przypiszesz d
Poznaj C++ w$ godziny0153 142 Godzina 9Pytania i odpowiedzi P: Dlaczego wskaźniki są aż tak ważne? O
Poznaj C++ w$ godziny0154 Godzina 10Zaawansowanewykorzystanie wskaźników Jedną z najpotężniejszych w

więcej podobnych podstron