2. 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;
3. 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.
4. Domeniul principal de utilizare a variabilelor de
tip pointer este gestionarea memoriei interne
a calculatorului.
Alocarea variabilelor dinamice se execută întro zonă specială a memoriei interne numită
heap (grămadă). Adresa de început a heapuluii este depusă în variabila predefinită de
tip pointer HeapOrg. Variabila de tip pointer
HeapPtr conţine adresa
primei locaţii libere, numită vîrful heap-ului.
5. 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.
6. 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.
7. 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;
begin
new (i); i^:=1;
p:=i;
new (i) ; i^ :=2;
j:=i^; k:=p^;
writeln('j+k=', j+k);
end.
8. 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.
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.