{ File: punt.pas }

{ Scopo: esempi base su puntatori }

program ProvaPuntatori;

type
  PuntatoreAIntero = ^integer;

var
  pi, pj : PuntatoreAIntero;


  procedure CambiaIntero (p: PuntatoreAIntero);
  begin
    p^ := -222
  end; { CambiaIntero }


  procedure AllocaIntero (var q: PuntatoreAIntero);
  begin
    new(q);
    q^ := -333
  end; { AllocaIntero }


begin { ProvaPuntatori }
  new(pi);               { allocazione dinamica di memoria }
  pi^ := 150;            { ora pi^ ha un valore significativo }
  pj := pi;              { pi e pj PUNTANO ALLA STESSA CELLA DI MEMORIA }
  dispose(pj);           { deallocazione di pj, E QUINDI ANCHE DI pi }
  new(pi);               { allocazione dinamica di memoria }
  pi^ := 4000;           { ora pi^ ha di nuovo un valore significativo }
  new(pj);               { allocazione dinamica di memoria }
  pj^ := pi^;            { le celle contengono lo stesso valore }
  new(pj);               { ERRORE METODOLOGICO: HO PERSO UNA CELLA DI MEMORIA }
  CambiaIntero(pi);      { pi non cambia, ma pi^ si }
  dispose(pi);
  AllocaIntero(pi);      { pi viene moficato }
end. { ProvaPuntatori }