110 likes | 357 Views
Wskaźniki. Zmienna wskaźnikowa (wskaźnik) zmienna wskazująca na zmienną danego typu, opisująca położenie innej zmiennej w pamięci, przechowuje adres innej zmiennej Zastosowanie zmiennej wskaźnikowej: dostęp do specjalnych komórek pamięci dynamiczna alokacja pamięci
E N D
Zmienna wskaźnikowa (wskaźnik) • zmienna wskazująca na zmienną danego typu, opisująca położenie innej zmiennej w pamięci, przechowuje adres innej zmiennej • Zastosowanie zmiennej wskaźnikowej: • dostęp do specjalnych komórek pamięci • dynamiczna alokacja pamięci • przekazywanie argumentów do funkcji przez wskaźniki • praca z tablicami
Operator wyłuskania (dereferencji): operator uzyskania zawartości obszaru identyfikowanego przez adres zawarty w zmiennej wskaźnikowej
Dynamiczna alokacja pamięci: Zmienne dynamiczne mają dość ważną cechę: w zależności od potrzeb mogą być tworzone i niszczone w czasie trwania programu . Pozwala to na zaoszczędzenie pamięci, w porównaniu ze zmiennymi statycznymi.
Dynamiczna alokacja pamięci w języku Pascal: • Dynamiczny przydział pamięci odbywa się przy użyciu następujących procedur: • Przydzielenie pamięci na zmienną zadanego typu: • New(zmienna_wskaźnikowa) ; • b) Zwolnienie pamięci przydzielonej za pomocą procedury New • Dispose(zmienna_wskaźnikowa) ; • c) Przydzielenie pamięci na ciąg bajtów o zadanej długości • GetMem(zm_wsk , ilość_bajtów) ; • d) Zwolnienie pamięci przydzielonej za pomocą procedury GetMem • FreeMem( zm_wsk, ilość_bajtów);
Przykład: var wsk_1 : ^ real ; deklaracje zmiennych wskaźnikowych begin New( wsk_1 ); przydzielanie pamięci wsk_1^ := 12.34; operacje na zmiennych dynamicznych Dispose( wsk_1 ); zwalnianie pamięci end .
Dynamiczna alokacja pamięci w języku C++: Operatory new i delete Operator new tworzy obiekt, a operator delete usuwa obiekt z pamięci. Przykłady: char *wsk; wsk = new char; delete wsk; int *wsktab; wsktab = new int[10]; delete [] wsk_tab;
Przekazywanie argumentów do funkcji przez wskaźniki: • język Pascal: • type: wsk=^integer; • var c,d:integer; • function max(a,b:wsk):integer; • … • writeln(max(@c,@d)); • język C++ • int max (int *a, int *b); • … • int c,d; • cout<<max(&c,&d);