procedure MyInc(var a: real; n: integer);begin a += n;end; var b: real; i: integer;begin b := ReadReal; i := ReadInteger; MyInc(b, i); writeln(b);end.
Здесь
b, i: фактические параметры при вызове MyInc
a, n: формальные параметры (a — параметр-переменная; n — параметр-значение)
При передаче параметра-значения i в соответствующий формальный параметр копируется значениеi.
А вот механизм передачи параметра-переменной называется передачей по ссылке.
Ссылкой обычно называют другое имя некоторого объекта.
Для параметра-переменной имя соответствующего формального параметра выступает в роли ссылки на переменную-фактический параметр.
Все, что происходит со ссылкой внутри подпрограммы происходит и с самим объектом вне подпрограммы, поскольку это один и тот же объект.
При передаче параметра по ссылке в подпрограмму передается не сама переменная, а её адрес:
MyInc(var a: real; i: integer); | @b (адрес b) Замечание 1. В 32-битных ОС размер адреса — 4 байта, это позволяет адресовать примерно 4 Гб операционной памяти.
Замечание 2. Размер адреса не зависит от размера переменной, поэтому при передаче параметров большого размера их предпочитают передавать по ссылке.