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;