Prosty przykład:
int main(){
int liczba = 7;
std::cout<<"Adres liczba"<<&liczba<<std::endl;
int* wsk = &liczba // zmienna wsk przechowuje adres liczba
std::cout<<"Pod adresem"<<wsk<<"jest liczba"<<*wsk<<std::endl;
*wsk = 15;
std::cout <<"Teraz liczba = "<<liczba<<std::endl;
}
do odczytania adresów zmiennych służy operator &.wyjaśnijmy linijkę
int* wsk = &x // zmienna wsk przechowuje adres liczbatutaj na lewo od gwiazdki znajduje się identyfikator typu int , dlatego zmienna wsk może przechowywać adresy liczb typu int. Typem zmiennej wsk jest int*
Skoro mamy wskaźnik możemy na niej wykonać dwie rzeczy.
1.uzyskać wartość obiektu na którą wskazuje wskaźnik służy do tego operator *
2.zmienienie jej wartości kod:
int x = 0 , y =2; int* wsk = &x; p = &y
Wskaźniki stałe to wskaźniki które zawsze mają te samą wartość (zawsze wskazują ten sam obiekt) wskaźniki stałem muszą być zainicjowane adresem obiektu od razu przy tworzeniu.
int x =0; int* const wsk = &x; // wsk jest stalym wskaźnikiem na xWskaźniki na stałą to wskaźniki umożliwiające jedynie odczytanie stanu obiektu
int x =0; const int* wsk = &x; // wsk jest wskaźnikiem na stałąi dodatkowo można utworzyć stały wskaźnik na stałą
int x = 0; const int* const wsk = &x;
Wskaźniki na wskaźniki
int x = 0; int* wsk = &x; int** wsk2 = &wsk;
Void*
jest to specjalny typ wskaźników który charakteryzuje się tym że można przypisać mu wartość wskaźnika dowolnego typu
int x = 0; int* wsk = &x; // wsk wskazuje na x void* wsk2 = wsk; //w wsk2 jest wartość wsk czyli adres x
taki kod służy w C do przekazywania do funkcji argumentów dowolnego typu nie jest to zbyt ładne prawda ?
dlatego w swoim kodzie nigdy nie używaj void* w c++ slużą do tego szablony
Wskaźnik zerowy
jest to wskaźnik o wartości 0 oznacza to że nie wskazuje on na żaden obiekt można też używać NULL
Tablice a wskaźniki
jeżeli wykonamy taki kod
int tab[2] = {0};
std::cout<<tab<<std::endl;
std::cout<<&tab[0]<<std::endl;
dostaniemy ten sam adres
więc możemy powiedzieć że nazwa tablicy może być traktowana jak wskaźnik na jej pierwszy element
dalej
int tab[2] = {0,1};
int* wsk = tab;
std::cout<<wsk<<std::endl;
std::cout<<*wsk<<std::endl;
std::cout<<wsk[1]<<std::endl;
po kolejiw pierwszej linijce dostaniemy ten sam adres jaki byśmy zobaczyli gdybyśmy przesłali tab
w następnej zobaczymy 0 czyli wartość pierwszego elementu
a w następnej wartość drugiego elementu czyli 1;)
czyli podsumowując
Wskaźników można używać jak nazw tablic , a nazw tablic jak wskaźników
Użytkownik DarkGL edytował ten post 03.08.2010 16:05


Dodatki SourceMod



Temat jest zamknięty










