Лекция: Параметры процедур
Параметры могут иметь любой тип, включая структурированный. Pascal поддерживает два различных метода передачи параметров: по значению и по ссылкам.
Когда параметры передаются по значениям, формальный параметр является переменной, локальной в блоке. Фактический параметр может быть любым выражением того же типа, что и соответствующий ему формальный параметр. Такие параметры называются параметрами-значениями. Их главная отличительная черта — изменение формальных параметров не влечет за собой изменения фактических параметров. Приведем пример типичной записи параметров-значений в описании процедур и функций:
Procedure Konc (A, B, C: integer; D: real);
Function Docs (S1, S2; real; Flag: boolean): real;
Тип параметров в секции формальных параметров должен быть указан в виде определенного ранее идентификатора типа. Так, запись
Procedure Okl (I: array[1… 12] of real);
является ошибочной. Тип переменной следует определить ранее в разделе описания типов блока:
Type Massiv = array[1… 12] of real;
Procedure Okl (I: Massiv);
Когда параметр передается посредством ссылки, фактический параметр является переменной. Формальный параметр обозначает эту фактическую переменную в течение всего времени активизации блока. Параметры, переданные посредством ссылки, называются параметрами-переменными. Их характерный признак — любое изменение формального параметра означает изменение фактического параметра. Для описания параметров-переменных в секции формальных параметров служит зарезервированное слово Var.
При использовании параметров-переменных формальные и фактические параметры должны совпадать по количеству и типу.
Однако возможны два исключения:
1. Можно передать значение параметров строкового типа, не совпадающее по длине с описанной в подпрограмме переменной.
2. Допускается отсутствие типа формального параметра в секции формальных параметров заголовка подпрограммы:
Procedure (Var FrontPage Express1);
Формальные параметры без типа несовместимы ни с каким типом. Допустимо сочетание параметров-значений и параметров-переменных в одной секции формальных параметров:
Procedure Prots (Var A, B, C: real; S: boolean);
Такая запись означает, что А, В, С — параметры-переменные, а S- параметр-значение. Напомним, что если процедура должна возвратить в программу определенные результаты, они должны быть специфицированы как параметры-переменные, т.е. в сочетании со словом Var, в противном случае результаты не будут возвращены.