Глобальные и локальные переменные
При создании программ, использующих процедуры, надо учитывать, что все метки, константы, переменные, которые описываются после заголовка процедуры, называются локальными объектами и доступны они только в пределах этой процедуры. Память под них выделяется при обращении к процедуре в специальной части, которая называется программным стеком. По окончании работы процедуры эта память освобождается и может быть занята под локальные переменные другой процедуры, поэтому все локальные объекты создаются при входе в процедуру и уничтожаются при выходе из нее.
Все объекты, описанные в вызывающей программе, называются глобальными. Память под глобальные переменные выделяется при компиляции программы. Эта часть памяти называется сегментом данных. Глобальные переменные находятся в сегменте данных от начала и до конца выполнения программы, поэтому ими можно пользоваться и в программе, и во всех процедурах, к которым обращается программа.
Следует знать:
Обмен данными между программой и вызываемой ею процедурой может производиться и через глобальные переменные;
Если же одно и то же имя определено и в программе, и в вызываемой ею процедуре, то в программе ему соответствует глобальный объект, но внутри процедуры глобальный объект недоступен. Он маскируется локальным объектом с таким же именем, над которым и выполняются необходимые действия.
Например, рассмотрим программу:
var a, b, c, d: integer;
procedure p(x: integer; var y: integer);
var
c: integer;
begin
c:= 1; d:= 1; x:= 1; y:= 1;
writeln(x:3, y:3, c:3, d:3);
end;
begin
a:= 0; b:= 0; c:= 0; d:= 0;
p(a,b);
writeln(a:3, b:3, c:3, d:3);
end.
При выполнении программа напечатает:
1 1 1 1
0 1 0 1
х – формальный параметр-значение, которому соответствует фактический параметр а = 0. В процедуре его значение изменится на 1, после чего результат будет напечатан. На переменной а это никак не отразится, и после выполнения процедуры а по-прежнему будет равно 0. у – параметр-переменная, поэтому при выполнении процедуры вместо у действия будут проводиться с переменной b, которая получит значение 1. это значение сохранится и после выхода из процедуры. с – локальная для данной процедуры переменная, которая маскирует глобальную переменную с основной программы. d – глобальная переменная, имеющая одинаковый смысл, как в основной программе, так и в процедуре.
В ТР допускается любой уровень вложенности процедур и функций. Процедура, описанная в основной программе, может иметь описания внутренних процедур и функций.
Дата добавления: 2017-11-04; просмотров: 485;