Tipul de date pointer

9
TIPUL DE DATE POINTER

description

Tipul de date pointer

Transcript of Tipul de date pointer

Page 1: Tipul de date pointer

TIPUL DE DATE POINTER

Page 2: 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;

Page 3: Tipul de date 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ţă.

Page 4: Tipul de date pointer

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

Page 5: Tipul de date pointer

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

Page 6: Tipul de date pointer

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

Page 7: Tipul de date pointer

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

Page 8: Tipul de date pointer

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.

Page 9: Tipul de date pointer

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.