Wskaźniki w C++
Ostatnio zmodyfikowano 2014-11-11 14:56
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? |
|
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 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: 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: 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. 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). |
|
« 1 » |