P11 zm wskaznikowe dynamiczne (2)


TYP WSKAŹNIKOWY

TYPE nazwa_typu_wskaźnikowego = ^nazwa_typu_bazowego ;

na przykład:

TYPE

wsk_liczby = ^integer ; ← wskaźnik na liczbę całkowitą

wsk = ^char ; ← wskaźnik na znak

tab = array [ 1 .. 10 ] of string ;

wsk_tab = ^tab; ← wskaźnik na tablicę

TYPE

wsk_elementu = ^element_listy ; ← wskaźnik na typ <element_listy>

element_listy = recorddefinicja typu <element_listy>

nazwisko : string[30];

imię : string [20];

wiek : byte;

plec : char

nastepna_osoba : wsk_elementu;

end;

Pointer - wskazanie na dane nieokreślonego typu (na początek dowolnego ciągu bajtów),

PChar - wskaźnik do łańcucha znaków zakończonego znakiem pustym (znakiem ASCII o kodzie 0),

if wsk_tab = nil then sprawdzenie ważności wskaźnika

writeln( 'Uwaga !!! Tablica nie została utworzona' )

else

. . . wykonanie obliczeń na tablicy dynamicznej

@ nazwa_zmiennej

@ - jednoargumentowy operator referencji,
operator uzyskania wskaźnika (adresu) zmiennej:

VAR

i : integer ; ← zmienna „i” typu całkowitego

wsk_int : ^integer ; ← wskaźnik na zmienną typu całkowitego

w programie:

i ← zawartość zmiennej „i”

@ i ← wskaźnik zmiennej „i”

na przykład:

i := 10 ;

wsk_int := @ i ;

wskaźnik_zmiennej^

^ - jednoargumentowy operator dereferencji - „wyłuskania”,
operator uzyskania zawartości obszaru identyfikowanego przez adres zawarty w zmiennej wskaźnikowej:

np. TYPE

tablica = array[ 1 .. 10 ] of real;

VAR

x : real ; wsk_1 : ^real ;

tab : tablica ; wsk_2 : ^tablica ;

begin

x := 11.22 ;

writeln ( 'zawartość zmiennej x =' , x );

wsk_1 := @ x ;

writeln ( 'zawartość zmiennej x =' , wsk_1^ );

tab[ 1 ] := 33.44 ;

wsk_2 := @ tab ;

wsk_2^[ 1 ] := 33.44 ; ← przypisanie do tab[1] poprzez wskaźnik

end.

Procedury przydziału pamięci

Procedury zwalniania pamięci

Przydzielenie pamięci na zmienną zadanego typu:

New( zmienna_wskaźnikowa ) ;

Zwolnienie pamięci przydzielonej za pomocą procedury New:

Dispose( zmienna_wskaźnikowa ) ;

np. var

wsk_1 : ^ real ; ← deklaracje zmiennych wskaźnikowych

wsk_2 : ^ array[1..10]of integer ;

begin

New( wsk_1 ); ← przydzielanie pamięci

New( wsk_2 );

wsk_1^ := 12.34; ← operacje na zmiennych dynamicznych

wsk_2^ [1] := 111;

wsk_2^ [2] := 222;

Dispose( wsk_1 ); ← zwalnianie pamięci

Dispose( wsk_2 );

end .

Przydzielenie pamięci na ciąg bajtów
o zadanej długości:

GetMem( zm_wsk , ilość_bajtów ) ;

Zwolnienie pamięci przydzielonej za pomocą procedury GetMem:

FreeMem( zm_wsk, ilość_bajtów );

np. var

wsk_1 : ^ real ; ← deklaracje zmiennych wskaźnikowych

wsk_2 : ^ array[1..10]of integer ;

wsk_ciagu_bajtów : pointer ;

begin

GetMem( wsk_1, 6 ); ← przydzielanie pamięci

GetMem( wsk_2, 10*2 );

GetMem( wsk_ciagu_bajtow, 1024 );

. . .

Dispose( wsk_1, 6 ); ← zwalnianie pamięci

Dispose( wsk_2, 10*2);

FreeMem( wsk_ciągu_bajtow, 1024 );

end .

Zapamiętanie aktualnego stanu sterty (pamięci dynamicznej) w zmiennej wskaźnikowej → parametrze procedury

Mark( zmienna_wskaźnikowa );

Zwolnienie wszystkich obszarów pamięci dynamicznej przydzielonych od momentu zapamiętania stanu stery w zmiennej

Release( zmienna_wskaźnikowa );

np. var

wsk_1 : ^ real ; ← deklaracje zmiennych wskaźnikowych

wsk_2 : ^ array[1..10]of integer ;

wsk_ciagu_bajtów : pointer ;

stan_sterty : pointer ;

begin

New( wsk_1 );

Mark( stan_sterty ); ← zapamiętanie stanu sterty

New( wsk_2 );

GetMem( wsk_ciagu_bajtow, 1024 );

. . .

Release( stan_stery ); ← odtworzenie stanu sterty

Dispose( wsk_1);

end .

Wyznaczenie sumarycznej wielkości wolnych obszarów na stercie

function MemAvail : longint ;

Wyznaczenie największego, ciągłego, wolnego obszaru na stercie

function MaxAvail : longint ;

np. var

wsk_1 : ^ real ; ← deklaracje zmiennych wskaźnikowych

begin

if ( MaxAvail < sizeof( real ) ) sprawdzenie wielkości wolnej pamięci

writeln( 'Błąd !!! Za mało pamięci' )

else

begin

New( wsk_1 );

. . .

Release( wsk_1 );

end ;

end .



Wyszukiwarka

Podobne podstrony:
Wskaźniki dynamiki zjawisk ekonomicznych
tp w 11 Wskaźniki i zmienne wskazywane Zmienne dynamiczne
30 Struktury zaleznosci miedzy wskaznikami zrow rozw K Chmura
Monitoring ZM Pierzchala
Dynamika1
c++ wykłady, Wyc 5 add wskaznki
Analiza wskaźnikowa 4
3 wykład Wskaźniki niezawodności
POWIAT AUGUSTOWSKI wskaźniki
7c analiza wskaźnikowa spółki erogaz
Techniki wywierania wplywu oparte na dynamice interakcji
Analiza dynamiczna chodu w fazie podporu
ANALIZA WSKAŹNIKOWA prezenacja 1
wskazniki 5
dynamika bryly sztywnej(1)

więcej podobnych podstron