Lekcja nr 8 - Wskaźniki, wszędzie wskaźniki. Czasem też referencja!

Wskaźniki, to bardzo pomocne narzędzie.

Wskaźnikiem moźna pokazywać na obiekty tego samego typu, lub klasy (np. int). Deklaracja takiego wskaźnika wygląda następująco:

int * wskaznik_na_typ_int;

Gwiazdka tworzy zmienną jaką wskaźnik.

A co takiego ciekawego przechowuje wskaznik_na_typ_int?

A no ADRES! Dokładnie, wskaźniki wskazują na adresy.

Jeśli chcemy uzyskać wartość z pamięci na którą wskazuje wskaźnik należy użyć dereferencji ( * )

Dobrze by było, by wskaźnik na coś wskazywał. Może wskazywać na istniejącą już zmienną:

int zmienna = 5;

int * wsk = &zmienna;

Tutaj z pomocą przyszła nam referencja ( & ), która zwraca adres pamięci zmiennej.

Oczywiście nie jest to jedyne użycie.

Drugim, znacznie ważniejszym użyciem, jest używanie wskaźniów z operatorami new i delete.

new Alokuje pamięć na stercie (w trakcie działania programu znajduje sobie pamięć, nie zajmuje jej od początku do końca), a delete ją zwalnia. Zawsze należy pamiętać o zwalnianiu pamięci, inaczej dojdzie do wycieków!

Użycie:

int * wsk = new int(10);

std::cout << *wsk << endl;

std::cout << wsk << endl;

 

Pierwsze odwołanie do obiektu cout zwróci nam wartość "10", a drugie wyświetli adres pamięci na której rezyduje nasz wsk.

Wskaźniki pozwalają w ten sposób na dynamiczne alokowanie pamięci.

Oczywiście umożliwiają też tworzenie dynamicznych tablic:

int * wsk = new int[10];

delete [] wsk;

 

Tworzenie dynamicznych wielowymiarowych tablic jest troszke trudniejsze - należy dodawać kolejne gwiazdki:

int indeks = 10;

int MaxY = 10;

int ** tab = new int[x];

for(int x = 0; i < indeks; ++i)

    *tab[x] = new int[MaxY];

tab[2][2] = 15;

 

for(int x = 0; i < indeks; ++i)

    delete tab[x];

delete [] tab;

 

Możliwe jest tworzenie takzwanych zmiennych referencyjnych - są one najczęściej używane w funkcjach do zmieniania wartości argumentów nie działając na ich kopiach.

int x = 5;

int & ref = x;


Załóż własną stronę internetową za darmo Webnode