Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Нестеров.docx
Скачиваний:
3
Добавлен:
22.09.2019
Размер:
267.49 Кб
Скачать

Вопрос 6.

Область действия идентификаторов при использовании процедур и функций.

Глобальные и локальные переменные.

Правило определения области действия идентификаторов.

Идентификаторы - это имена констант, переменных, меток, типов, объектов, классов, свойств, процедур, функций, модулей, программ и полей в записях. Идентификаторы могут иметь произвольную длину. Идентификатор всегда начинается буквой, за которой могут следовать буквы и цифры. Напомню, что буквой считается также символ подчеркивания, поэтому идентификатор может начинаться этим символом и даже состоять только из одного или нескольких символов подчеркивания. Пробелы и специальные символы алфавита не могут входить в идентификатор.

Областью видимости (действия) идентификатора называется часть программы, где он может быть использован. Область видимости идентификаторов определяется местом их объявления. Переменные, константы и типы, объявленные в основной программе до определения программ – глобальные. Они доступны всем функциям и процедурам. Переменные, константы и типы, описанные в какой-либо подпрограмме и доступные только в ней – локальные.

Правила определения области действия идентификаторов:

  1. Действуют все идентификаторы, определенные внутри процедуры/функции.

  2. Действуют все идентификаторы окружающего контекста, если их имена отличаются от имен, объявленных внутри процедуры/функции.

  3. Локальные идентификаторы процедуры/функции во внешнем окружении действовать не будут никогда.

  4. В случае совпадения имен глобального и локального идентификаторов действовать будет только внутренний локальный идентификатор.

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

Операторы, расположенные в теле процедуры/функции могут обращаться к ее локальным данным (константам и переменным) и изменять их значения. Однако следует помнить, что значения локальных данных существуют пока процедура/функция работает. Как только она завершается, все изменения значений локальных данных, сделанные операторами процедуры/функции, исчезнут вместе с освобождением памяти

program Name;

var AO, BO: integer;

procedure p1;

var A1, B1: integer;

procedure p2;

var A2, B2: integer;

begin

<оператор2>;

end;

begin

<оператор1>;

end;

begin

<оператор>;

end;

Вопрос 7.

Способы передачи параметров.

Формальные и фактические параметры.

Классификация параметров.

Обмен информацией между вызываемой и вызывающей функциями осуществляется с помощью передачи параметров. Передача параметров может производиться двумя способами - по значению и по ссылке. Параметры, передаваемые по значению, называют параметрами-значениями, передаваемые по ссылке - параметрами-переменными. Последние отличаются тем, что в заголовке процедуры (функции) перед ними ставится служебное слово var.

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

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

Выбор способа передачи параметров при создании процедуры (функции) происходит в соответствии со сказанным выше: входные параметры нужно передавать по значению, а выходные - по ссылке. Практически это сводится к расстановке в заголовке процедуры (функции) описателя var при всех параметрах, которые обозначают результат работы подпрограммы. Однако, в связи с тем, что функция возвращает только один результат, в ее заголовке использовать параметры-переменные не рекомендуется.

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

Классификация

  1. Параметры-значения (или передача параметров по значению). Параметры-значения - это локальные переменные подпрограмм, стартовые значения которых задаются при вызове подпрограмм из внешних блоков (им присваиваются значения соответстующих фактических параметров). Параметры-значения, описанные в заголовке, могут изменять свои значения наряду с прочими переменными, но эти изменения будут строго локальными и никак не отразятся на значениях фактических параметров.

  2. Параметры-переменные (или передача параметров по ссылке). Параметры-переменные предоставляют принципиально иной механизм передачи параметров, состоящий в том, что в подпрограмму передается не значение фактического параметра, а ссылка на ячеку (или ячейки) памяти где хранится  значение этого фактического параметра. При этом все действия с формальным параметром-переменной (внутри подпрограммы) на самом деле являются действиями над фактическим параметром.

  3. Параметры-константы - аналогичны параметрам-значениям с той лишь разницей, что они не могут изменять свои значения в теле подпрограммы. Попытка изменить значение параметра-константы будет немедленно замечена компилятором.