http://www.adaconcept.com/programs/mutatok.adb
-- Rotter Gyorgy
-- A mutatok hasznalatat bemutato program
with Ada.Text_IO;
use Ada.Text_IO;
procedure mutatok is
-- Gyujtotipus: amire mutato/mutathato mutatok vannak a tipusban. A null minden mutato tipusnak a tipuserteke!!!
-- (A mutato egy memoriacimre mutat...)
-- A dinamikus valtozo felszabadul, amikor a letrehozasahoz hasznalt mutato tipus megszunik!!!
-- ha vissza szeretnenk adni egy dinamikus meretu valamit, akkor mutatot hasznalhatunk!
begin
Put_Line("Program indul");
declare
-- A legfontosabb (foglalt)szo amit a mutato-hasznalat kapcsan meg kell jegyeznunk az az access
type M_string is access string; -- stringre mutathato mutato tipus (nem biztos, hogy stringre mutat, a null is tipusertek!)
m:M_string; -- implicit modon null-ra inicializlodik egy mutato!!!
begin
m:=new string'("egy mutatott szoveg"); -- a kezdo-ertek adas (sok esetben elhagyhato, itt nem)
m.all:= "ugyanolyan hosszu!!";
Put_Line(m.all); -- az m nevu (stringre mutathato mutato tipusu) mutato altal mutatott ertek (tomb/rekord mutato eseten a .all elhagyhato
-- es kozvetlenul a mutato tipusu valtozo neve utan irhato a tomb-elem-index vagy a szelektor (nev))
end;
declare
type M_integer is access all integer; -- az all lehetove teszi, hogy ne csak a dinamikus memoriateruletre (storage pool) mutathasson az ilyen tipusu mutato, hanem "barhova"
m:M_integer:=null; -- implicit modon null-ra inicializlodik egy mutato!!!, de hogy hangsulyozzuk ezt az erteket, kiirhatjuk!!!
i:aliased integer:=18; -- meg kell!!! jelolni azokat az automatikus/statikus tarteruleten levo valtozokat, amelyeket egy mutaton keresztul alneven is elerhetunk, ez nagyban noveli a program biztonsagat (es pl. azert is,
-- nehogy a fordito kioptimalizalja oket :))
begin
m:=i'Access; -- az "alneven" is elerheto valtozoknak a cimet az 'Access attributummal kerhetjuk le
i:=integer'succ(i);
Put_Line(integer'image(m.all));
end;
Put_Line("Program vege");
end mutatok;