Rożnica miedzy wskaźnikiem, a zwykłym int z wartością.

0

Witam,
Obecnie jestem w trakcie czytania książki w C++, otóż jak i inni, zatrzymałem się na dziale ze wskaźnikami.
Nachodziła mnie jedna myśl...
Po co są wskaźniki ? Każda książka którą czytałem o wskaźnikach wyraźnie mówiła, że jest to szybszy dostęp do pewnych wartości.
Z tym, że nie umiem sobie odpowiedzieć jaka jest różnica między zwykłym:

int wartosc = 44;
cout << wartosc <<endl;

od:

int wartosc = 44;
int * wskaznik;
wskaznik = &wartosc;
cout<<*wskaznik;

Pokaże nam to samo, ale więcej pisania. Jak to ma się do przyszłości ?

1

W przyszłości będziesz przesyłać większe rzeczy niż inty. Ot, na przykład kilkumegabajtową teksturę. I zamiast ją kopiować za każdym razem, jak coś chce z niej skorzystać, dajesz po prostu wskaźnik do niej.

Swoją drogą, w nowoczesnym C++ odchodzi się od stosowania „gołych” wskaźników na rzecz tych „sprytnych” spod znaku std::shared_ptr i kolegów.

0

Innym powodem użycia wskaźników może być np przekazanie wskaźnika jako argumentu funkcji, wówczas możesz dokonywać operacje na danych znajdujących się pod wskazanym adresem (nawet jeśli ta zmienna nie jest widoczna dla tej funkcji).

0

Czyli wskaźnik jest podobny do funkcji, piszę jedna funkcje raz, a wywołuję ja za każdym razem paroma wyrazami zamiast wklepywać cały czas to samo. ( co oszczędza miejsca i czas)?

0

W pewnym sensie można to tak ująć. Wskaźnik jest to adres do pewnych danych. Wskaźnik jest tylko adresem, czyli używając wskaźnika operujesz na danych zawartych pod tym właśnie adresem.
Jak użyjesz komendy cout<<wskaznik; wyświetli ci ten adres zapisany szesnastkowo.

0

poza tym co pisano wyżej jest jeszcze takie coś jak arytmetryka wskaźnikow, jeśłi jestem w danym miejscu w pamięci, na który mam wskaźnik i chce przejśc na następną pozycję, to przesówam odpowiednio adres, zamiast przeliczać wszystko od początku, żeby "skoczyć" pod dany adres. Zresztą sam wskaźnik ma szersze zastosowanie, adres, który przechowuje, niekoniecznie musi być adresem z danymi, moze być tez adresem funkcji którą chcemy wywołać. W samym nowoczesnym C++ większość tych rzeczy jest opakowana w iteratory, metody klas ect, więc pisząc mniej niskopoziomowo możesz zacząć przestac zauważać istnienie wskaźników, co nie znaczy, że ich nie ma, bo sa zazwyczaj w cos opakowane...

1 użytkowników online, w tym zalogowanych: 0, gości: 1