Tipul de date pointer
-
Upload
colegiul-de-industrie-usoara -
Category
Education
-
view
347 -
download
5
description
Transcript of Tipul de date pointer
TIPUL DE DATE POINTER
Mulţimea de valori ale tipului predefinit de date pointer (indicator) constă din adrese şi valoarea specială nil.
Operaţiile care se pot face cu valori de tipul de date pointer sînt = şi <>. Valorile de acest tip nu pot fi citite de la tastatură şi afişate pe ecran.
O variabilă de tip pointer se introduce printr-o declaraţie forma:
var p : pointer;
Program PI 34; { Tipul de date pointer }var p : pointer;i, j : ^integer;x, y : ^ real;r, s : ^ string;
begin{ p va identifica o variabilă dinamică de tipul integer }
new(i); i^:=1;P^ = i ;
new(i); i ^ :=2;j :=p;writeln('j^=', j^);
{ p va identifica o variabilă de tip real }new (x); x^: =1 ;p:=x;
new (x); x^:=2;y:=p;Writeln(y^=' y^); {se afişează 1.OOOOOOOOOOE+00 }{ p va identifica o variabilă dinamică de tipul string }
new (r); r^: = 'AAA';p:=r;
new (r); r^:=‘BBB';s:=p;
writeln ('s^=', s^); { se afişează AAA }end.
Programul ce urmează ilustrează utilizarea variabilelor de tip pointer pentru memorarea temporară a valorilor variabilelor de tip referinţă.
Domeniul principal de utilizare a variabilelor de tip pointer este gestionarea memoriei interne a calculatorului.
Alocarea variabilelor dinamice se execută într-o zonă specială a memoriei interne numită heap (grămadă). Adresa de început a heap-uluii este depusă în variabila predefinită de tip pointer HeapOrg. Variabila de tip pointer HeapPtr conţine adresaprimei locaţii libere, numită vîrful heap-ului.
Domeniul de aplicare
Apelul procedurii mark are forma:mark(p)
unde p este o variabilă de tip pointer. Procedura memorează adresa vîrfului din HeapPtr în variabila p.
Apelul procedurii release are forma:release(p)Această procedură reface adresa vîrfului în
starea înregistrată anterior cu procedura mark: valoarea conţinută în variabila de tip pointer p este depusă în indicatorul HeapPtr.
Procedurile predefinite mark şi release
1) se memorează adresa vîrfului cu procedura mark;
2) se creează variabilele dinamice cu procedura new;
3) se utilizează variabilele dinamice create;4) cînd variabilele dinamice nu mai sînt
necesare, spaţiul ocupat din heap este eliberat cu procedura release.
Algoritmul gestionării memoriei
1. Care este mulţimea de valori ale tipului de date pointer? Ce operaţii pot fi
efectuate cu aceste valori?2. Comentaţi următorul program:
Program PI36;{ Eroare }
var i : ^integer;j, k : integer;
p : pointer;beginnew (i); i^:=1;p:=i;
new (i) ; i^ :=2;j:=i^; k:=p^;writeln('j+k=', j+k);end.
întrebări şi exerciţii
Program P137;var i, j, k, m, n : ^integer; p : pointer;begin { crearea variabilelor i^, j^, k^ } new(i); new(j); new(k); i^:=1; j^:=2; k^:=3; p:=j; { p reþine adresa din j } { distrugerea variabilei j^ ºi crearea
variabilei m^ } dispose(j); new(m); m^:=4; j:=p; { refacerea adresei din j } writeln('i^=', i^, ' j^=', j^, ' k^=', k^); { distrugerea variabilei m^ si crearea
variabilei n^ } dispose(m); new(n); n^:=5; writeln('i^=', i^, ' j^=', j^, ' k^=', k^); readln;end.
Lansaţi în execuţie programele ce urmează. Explicaţi rezultatele afişate pe ecran.
Program P138;var i, j, k, m : ^integer;begin { crearea variabilelor i^, j^ } new(i); new(j); i^:=1; j^:=2; { eliberarea memoriei heap-ului } release(HeapOrg); { crearea variabilelor k^ øi m^ } new(k); new(m); k^:=1; m^:=2; writeln('k^=', k^, ' m^=', m^); i^:=3; j^:=4; writeln('k^=', k^, ' m^=', m^); readln;end.
Program P138;var i, j, k, m : ^integer;begin { crearea variabilelor i^, j^ } new(i); new(j); i^:=1; j^:=2; { eliberarea memoriei heap-ului } release(HeapOrg); { crearea variabilelor k^ øi m^ } new(k); new(m); k^:=1; m^:=2; writeln('k^=', k^, ' m^=', m^); i^:=3; j^:=4; writeln('k^=', k^, ' m^=', m^); readln;end.