1  program odkazem_a_hodnotou;
 2
 3  var x,y,z:byte;
 4
 5  procedure hodnotou(x,y,z:byte);
 6    begin
 7          x:=10;
 8          y:=20;
 9          z:=30;
10    end;
11
12  procedure odkazem(var x,y:byte; z:byte);
13    begin
14          x:=10;
15          y:=20;
16          z:=30;
17    end;
18
19
20  begin
21          x:=6;           {Přiřazení a výpis hodnot}
22          y:=7;
23          z:=8;
24          writeln('Původní hodnoty');
25          writeln('x=',x);
26          writeln('y=',y);
27          writeln('z=',z);
28          writeln;
29
30          hodnotou(x,y,z);    {'Při volání hodnotou se proceduře nebo funkci předá pouze hodnota dané proměnné a vytvoří se její kopie.
31                          Pracuje se s touto kopií, a proto změny její hodnoty nemají vliv na původní proměnnou.}
32          writeln('Nové hodnoty po volání hodnotou');
33          writeln('x=',x);
34          writeln('y=',y);
35          writeln('z=',z);
36          writeln;
37
38
39          odkazem(x,y,z);      {Při volání odkazem se odkazujeme přímo do paměti, na adresu, kde je daná proměnná uložena.
40                              Proto se hodnoty proměnných volaných odkazem (proměnné 'x' a 'y') mění.}
41          writeln('Nové hodnoty po volání odkazem');
42          writeln('x=',x);
43          writeln('y=',y);
44          writeln('z=',z);
45          writeln;
46
47
48          writeln('Při volání hodnotou se proceduře nebo funkci předá pouze hodnota dané proměnné a vytvoří se její kopie.');
49          writeln('Pracuje se s touto kopií, a proto změny její hodnoty nemají vliv na původní proměnnou.');
50          writeln;
51          writeln('Při volání odkazem se odkazujeme přímo do paměti, na adresu kde je daná proměnná uložena.');
52          writeln('Proto se hodnoty proměnných volaných odkazem (proměnné "x" a "y") mění.');
53  end.