Autor: Kub@z | 1.5.2004 |
type ukazatel = ^integer;
Tím jsme si vytvořili ukazatel na typ integer. S tímto ukazatelem nemůžeme pracovat tak, že do něj přiřadíme hodnotu (protože tím bychom vlastně řekli ukazateli, na jaké místo v paměti má ukazovat), ale musíme přiřadit hodnotu do paměti, kam ukazatel ukazuje. Tuto paměť musíme nejdříve vyhradit procedurou "new":
type ukint = ^integer;
var prom: ukint; (* proměnná je ukazatel (možno zapsat jako "prom: ^integer") *)
begin
new(prom); (* získáme paměť *)
prom^ := 50; (* do místa v paměti, kam ukazuje "prom", zapíšeme hodnotu *)
writeln(prom^); (* přesvědčíme se, že se hodnota opravdu uložila *)
end.
type pint = ^int; (* ukazatel na náš záznam *)
int = record
hodnota: integer;
dalsi: pint;
end;
var prvni, ak: pint;
pom: integer;
begin
new(ak); (* vyhradíme si paměť *)
prvni := ak; (* prvni ukazuje na první položku *)
repeat
readln(pom); (* uživatel zadá hodnotu *)
ak^.hodnota := pom;
new(ak^.dalsi); (* vytvoříme další položku *)
ak := ak^.dalsi; (* "ak" ukazuje na další položku *)
ak^.dalsi := nil; (* nechceme, aby další položka měla nějakou hodnotu *)
until pom = 0; (* zadáváme čísla, dokud není zadána nula *)
(* nyní všechny položky vypíšeme *)
ak := prvni; (* "ak" zase ukazuje na první položku *)
while ak^.dalsi <> nil do begin (* dokud existuje další položka *)
writeln(ak^.hodnota); (* vypíšeme její hodnotu *)
ak := ak^.dalsi;
end;
end.
var m: ^byte;
begin
m := Ptr($40, $49); (* adresa videomódu v paměti *)
writeln('Videomod: ',m^);
end.
var p: pointer;
pom: string;
begin
pom := 'Ahoj lidi, jak se mate?'; (* zadáme text *)
p := addr(pom); (* "p" teď ukazuje na adresu "pom" v paměti *)
writeln(string(p^)); (* vypíšeme, co se v této paměti vyskytuje, abychom se *)
(* přesvědčili, že "p" ukazuje opravdu na adresu "pom" *)
end.
var p: pointer;
begin
getmem(p, 20000); (* právě máme k dispozici 20 KB paměti *)
freemem(p, 20000); (* ale my je nevyužijeme a zase je z paměti uvolníme *)
end.