Локальные и глобальные идентификаторы Паскаль

Когда мы используем процедуры и функции в Паскале, то имеем дело с идентификаторами (т.е. именами) в программе. При составлении программного кода для использования не все имена оказываются доступными.

Доступ к определенному идентификатору в тот или иной момент времени осуществляется в зависимости от того, в каком блоке описан используемый идентификатор.

Помните: формальные параметры функций и процедур всегда представляют собой локальные переменные для тех блоков, где они описаны. Существует два типа идентификаторов: локальные и глобальные идентификаторы Паскаль.

Локальные идентификаторы Паскаль:

Локальные идентификаторы — это имена, которые описаны либо в заголовке, либо в разделе описаний функции или процедуры. Основное правило работы с такими идентификаторами: Локальные идентификаторы являются доступными только лишь в пределах того блока, в котором они описаны.

Этот блок, а также все остальные блоки, вложенные в него, называются областью видимости для соответствующих локальных идентификаторов.

Глобальные идентификаторы Паскаль:

Глобальные идентификаторы — это имена, заключенные в блоке Program, используемом для всей программы. При работе с этим типом идентификаторов следует руководствоваться правилом.

Идентификаторы, которые описаны в одном блоке, могут совпасть с идентификаторами из других блоков, которые либо содержат данный блок, либо вложены в него. Причиной этому является тот факт, что переменные, которые описаны в различных блоках (пусть у них всех одинаковые имена), хранятся в различных областях ОЗУ (оперативная память).

Область памяти, хранящая глобальные идентификаторы, называется сегментом данных программы. Их создание происходит в процессе компиляции, и кроме того они действительны на протяжении всей работы программы. Локальные переменные, в отличие от глобальных, хранятся в области памяти, которая именуется стеком. Они временны, поскольку их создание осуществляется в момент входа в подпрограмму, а уничтожение — в момент выхода из подпрограммы.

Может возникнуть ситуация, когда имя, которое описано в блоке, в случае совпадения «закрывает» те же самые имена из блоков, содержащих данный.

Другими словами, если есть два блока, один из которых вложен в другой, и в обоих блоках содержатся переменные с одинаковыми именами, то после перехода во «внутренний» блок мы будем работать с переменной, локальной для рассматриваемого блока. А переменная с этим же именем, заключенная во «внешнем» блоке, оказывается временно недоступна — это будет продолжаться до тех пор, пока не осуществим выход из «внутреннего» блока. Совет.

Все имена, имеющие в той или иной подпрограмме только лишь вспомогательное назначение, идентифицировать в качестве локальных, что избавляет от опасности изменений глобальных объектов с теми же именами.

Пример. Создадим программу, которая вычисляет значение функции y=a*ln(sin(x))

program log; var d : real; {глобальные параметры}
function fun(b,x:real):
real; {начало описания функции}
var y:real; {локальные параметры}
begin y:=b*ln(sin(x)); {вычисление значения заданного выражения}
fun:=y; {присвоение имени функции результата вычисления подпрограммы}
end; {конец описания функции}
begin {начало основной программы}
writeln('Введите значение b');
readln(b);
writeln('Введите значение x');
readln(x); d:=f(b,x);
writein('Значение функции y равно',d);
end.

Рейтинг
( Пока оценок нет )
Загрузка ...