Разные способы передачи переменной Урок 14 Функции и Процедуры.

В уроке 14 представлен пример.

var
  a, b, c: integer; // объявляем глобальные переменные программы
  
procedure sum(x, y: integer; var z: integer); // начало объявления процедуры
begin
  z := x + y; // тело процедуры
end;
  
begin // начало тела программы
  write('Введите два числа: ');
  readln(a, b);
  sum(a, b, c); { -- вызов процедуры с параметрами (аргументами)
  процедура вызывается своим именем,
  которое вы написали после зарезервированного слова procedure в описании}
  writeln(c);
end.
- переменная z в процедуру sum() передана по ссылке, это значит, что если её изменить в теле процедуре, то она изменится и в том месте, откуда её передали в процедуру (например, в теле основной программы).
- переменные же x и y переданы по значению -- это надо понимать так, что если их значения будут изменяться внутри процедуры (в данном случае), то "снаружи" эти изменения видны не будут.

Прошу объяснить более подробно работу переменной "z"