KIỂU CON TRỎ VÀ BIẾN ĐỘNG
10.4 CÁC THỦ TỤC VÀ HÀM CHUẨN
2006.1011
Thủ tục New(p): Cấp phát bộ nhớ cho biến động trỏ bởi biến con trỏ p.
Nếu dùng N lần NEW(p) liên tục thì có N biến động cùng kiểu, nhưng con trỏ p chỉ trỏ vào biến động tạo ra cuối cùng. Muốn truy nhập các biến động tạo ra trước đó, phải lưu trữ địa chỉ của chúng.
Thủ tục Dispose(p): Giải phóng bộ nhớ đã cấp cho biến động trỏ bởi p.
Thủ tục Mark(p): Đánh dấu địa chỉ cần giải phóng sau này.
Thủ tục Release(p): Xoá mọi biến động được tạo ra từ khi đánh dấu bởi Mark(p).
VD 10.2 (dùng New(p), Dispose(p), Mark(p), Release(p))
VAR {Khai báo các biến con trỏ}
p, q, r, s: ^Real; {biến con trỏ chứa đ/c biến động kiểu Real} t: Pointer; {con trỏ không định kiểu}
BEGIN New(p); ... Mark(t); ... New(q); ... New(r); ... Release(t); ... END.
Thủ tục GetMem(p, n): Cấp phát n bytes cho biến động trỏ bởi p.
Hàm Maxavail: Cho kích thước block cực đại các bytes liên tiếp chưa dùng Heap.
Hàm Memavail: Cho tổng số bytes còn rỗi trong Heap.
VD 10.3 Lập trình tạo n < 100 biến động có kiểu số nguyên. Tính tổng các số nguyên tố trong n số đó.
VARA: array[1..100] of ^Integer; N, i: Byte; S: LongInt; Function NTO(n: Integer): Boolean; Var i: Integer;
Begin
NTO:= FALSE; If n < 2 then Exit;
For i:= 2 to Trunc(Sqrt(n)) do If n mod i = 0 then Exit; NTO:= TRUE; End; BEGIN Write(‘n = ‘) ReadLn(n); For i:= 1 to n do Begin New(a[i]);
Write(‘Nhap so thu ‘, i, ‘: ‘); Readln(a[i]^); End;
{Tinh tong cac so nguyen to}
S:= 0;
For i:= 1 to n do
If NTO(a[i]^) then S:= S + a[i]^;
Write(‘Tong cac so nguyen to : ‘, S); Readln; END.