Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wskaźniki w C++

Ostatnio zmodyfikowano 2014-11-11 14:56
Autor Wiadomość
Nazerin
Temat założony przez niniejszego użytkownika
Wskaźniki w C++
» 2014-11-11 14:26:57
Czytałem rozdział poświęcony wskaźnikom , szukałem w google, jednak nadal nie wiem, dlaczego się ich używa skoro alokacja pamięci jest automatyczna, a do zmiennych można odwołać się bezpośrednio lub po przez referencje. Mógłby ktoś mi to wytłumaczyć, podać stronę z wytłumaczeniem?
P-120368
Chlorek
» 2014-11-11 14:56:28
Jak większość rzeczy w C++ dla początkującego wydają się niepotrzebne, a jednak stanowią dość ważny element z którego zaczniesz korzystać nie raz. Zrozumieć naturę wskaźników to najważniejsza rzecz. Wskaźnik to dosłownie adres w pamięci, a to że ma jakiś typ informuje jedynie program o tym ile bajtów od tego adresu w pamięci zajmuje. Filozofią tego wszystkiego jest bowiem podejmowanie decyzji w czasie działania programu a nie kompilacji.

Najpowszechniejsze wykorzystanie wskaźników to oczywiście alokacja dynamiczna zmiennych, a częściej tablic o nieznanym w czasie kompilacji rozmiarze
C/C++
int runtimeValue;
std::cin >> runtimeValue;
int * x = new int[ runtimeValue ];

Przydatne są też często konwersje typu wskaźnika, bez problemu możemy rzutować jedno na drugie, bo dane nie są w zupełności ruszane:
C/C++
int * x = new int { 2 };
void * y =( void * ) x;
Jak już wspomniałem typ służy jedynie jako informacja ile w bajtach od adresu początkowego zajmuje zmienna, czyli wynik sizeof na typie:
C/C++
cout << sizeof( int ) << endl << sizeof( void );

Generalnie bardzo przydatna rzecz przy operacjach na pamięci (dlatego C++ jest tak świetnym językiem, pomimo natury HLL pozwala zobaczyć bajty pamięci), obsłudze plików w trybie binarnym (np. do zapisu całych struktur, czy instancji klas), tworzeniu dynamicznych containerów itd.. Wszystko to co jest potrzebne do korzystania z jakże wygodnego API dostępnego w bibliotekach.

Plusem jest też niekopiowanie zmiennych a jedynie podanego adresu, jest to wydajnościowy plus.

Co do odwoływania się przez referencję, zwraca ona wskaźnik (adres) więc nie jest to po prostu zmienna.
C/C++
void func( int * test )
{
}

int z = 2;
func( & z );

Niektóre zastosowania jakie miały wskaźniki zostały wyparte przez nowe mechanizmy C++. Słowami podsumowania powiem, że z czasem po prostu zaczniesz spotykać sytuację w których wskaźniki będą ci potrzebne i to nawet bardzo. Jeśli teraz nie widzisz potrzeby ich używania to w końcu ta potrzeba sama się odezwie. Na pewno i tak ktoś wytknie mi tu błędy jakieś (choć piszę tyle lat to prawie całą wiedzę mam z autopsji, raczej nie czytam książek/tutoriali).
P-120370
« 1 »
  Strona 1 z 1