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ć.
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ć.
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.