Podstawy wskaźników w C++

+3

Wskaźnikiem nazywamy zmienną, która przechowuje adres innej zmiennej w pamięci komputera. Aby zadeklarować zmienną typu wskaźnikowego, należy do nazwy typu zmiennej, na który będzie wskazywać, dopisać znak gwiazdki "*".

Podstawowe użycie wskaźnika

Zwyczajowo zmienna typu wskaźnikowego ma w swojej nazwie słowo "pointer", formę skróconą "ptr" lub jej spolszczenie "wsk".

Analiza programu

Przeanalizujmy kod ze wstępu.

Każdy, kto zna podstawy C++ powinien orientować się, co się stało do linii 4 włącznie. W linii 5 zostaje zadeklarowany wskaźnik zgodnie z zasadą, o której wspomniałem we wstępie. Gwiazdka w tej linijce może być oddzielona spacją z dowolnej strony od reszty instrukcji, mogą być to nawet dwie spacje z każdej strony, ale musi być co najmniej jedna.

Parametr "nullptr" oznacza wskaźnik na element zerowy, czyli taki, który w pamięci komputera ma adres równy 0. W praktyce oznacza to, że wskaźnik nie wskazuje na żadną zmienną zadeklarowaną w programie.

W linijce 6. wskaźnikowi "ptr" zostaje przypisany adres zmiennej "a". Znak ampersand "&" ustawiony przed nazwą zmiennej oznacza pobranie jej adresu. Co ciekawe, stosuje się go również przy deklarowaniu parametrów funkcji, jeśli ma ona wykonywać operacje na oryginalnej zmiennej zamiast na jej kopii tworzonej przez samą funkcję, np. swap(a,b) do zamiany ze sobą wartości zmiennych a i b.

Linijka 7. wyrzuca na konsolę wartość zmiennej "a". W tym przypadku gwiazdka nie oznacza już deklaracji typu wskaźnikowego, a to, że chodzi nam o wartość zmiennej, na którą ten wskaźnik wskazuje. Stąd też instrukcja ta wyświetli liczbę 12.

W linijce 8. pojawia się to samo, co w linijce 7., ale już bez znaku gwiazdki. W takim przypadku wyświetlony zostanie adres zmiennej, na którą wskazuje wskaźnik "ptr", ponieważ to jest to, co w "ptr" jest przechowywane.

Gdybym w linijce 7. zastąpił "*" ampersandem, wówczas wyświetlony zostanie adres wskaźnika. Sam wskaźnik jest zmienną, więc swój adres również posiada, w ten sposób możemy go wyświetlić, bądź też przypisać do innego wskaźnika.

Warto też wspomnieć, że deklarując wiele wskaźników, w każdej linijce można zadeklarować maksymalnie jeden, w przeciwieństwie do standardowych zmiennych.

Zastosowanie wskaźników

Dzięki wskaźnikom możliwe staje się operowanie funkcjami na dowolnych zmiennych lokalnych, które normalnie nie byłyby dla nich widoczne (pod warunkiem, że są widoczne przez instrukcje je wywołujące). Przydaje się to zwłaszcza w tablicach, gdzie wskaźnik wskazuje wówczas na pierwszy element tablicy, a każdy kolejny jej element ma adres równy adresowi pierwszego elementu + indeks danego elementu. Przypominam, że pierwszy element każdej tablicy ma indeks równy zero.

Oczywiście wskaźniki mają więcej zastosowań, jak np. alokowanie tablicy dynamicznej, a także więcej operacji, które można na nich wykonać (a czasem nawet trzeba), jak zwalnianie miejsca poprzez instrukcję "delete".

Proponuję potworzyć samemu kilka programów z wykorzystaniem wskaźników, np. funkcję odwracającą kolejność elementów tablicy. Powodzenia!

+1
Poziom 15
20 mar, 2024
dobry blog

яшертыуиопэасдфгчйклжщзхцвбнмью

яшертыуиопэасдфгчйклжщзхцвбнмью