Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Каждая процедура может иметь собственный раздел описания переменных (а также типов, констант и т.п.). Переменные, описанные в этом разделе, называются локальными и действуют только внутри процедуры.
Часто некоторые переменные используются только внутри некоторой последовательности инструкций и не имеют смысла за пределами этих инструкций. В программе существенно проще разобраться, если такие инструкции будут оформлены как процедура, а такие переменные будут описаны как локальные.
Пример 1: Программа с процедурой, печатающей слово Hello 10 раз.
var i: integer; procedure Hello10; var {Открытие раздела описаний локальных переменных} i: integer; {Описание локальной переменной i} begin for i:=1 to 10 do write('Hello_'); end; begin for i:=1 to 5 do Hello10; {Пять раз вызываем процедуру} end.
Программа выведет 5 строк по 10 слов Hello.
Как видим, раздел описаний процедуры располагается сразу после заголовка и перед телом процедуры. В разных процедурах можно использовать локальные переменные с одинаковыми именами. Не смотря на одинаковость имен, это будут разные переменные, их значения будут храниться в разных областях памяти, а присваивания одним никак не повлияют на значения других. После завершения работы процедуры память, выделенная под локальные переменные, освобождается, все их значения пропадают.
Переменные, описанные в разделе описаний основной программы, будем называть глобальными. Глобальные переменные действуют как в теле программы, так и во всех процедурах. Если имя локальной и глобальной переменной, как в приведенном примере, совпадают, то это все равно разные переменные. Внутри процедуры при обращении к переменой i подразумевается, что это локальная переменная.
Представьте себе, что в рассмотренном примере локальная переменная i не описана. Синтаксической ошибки не возникнет, так как есть глобальная переменная, которая и будет использована как счетчик цикла внутри процедуры. Однако смысл программы измениться. Процедура изменит значение глобальной переменной i, которая используется как счетчик в другом цикле уже в основной программе. Последствия непредсказуемы. Скорее всего, программа выведет только одну строку со словами Hello. Но может и зациклится, выводя Hello до бесконечности.
Пример 2: Глобальная и локальная переменные.
var x: real; {Описание глобальной переменной x} procedure P2; var x: real; {Описание локальной переменной x} begin x:=10; {Присваивание значения локальной переменной} end; begin x:=5; {Присваивание значения глобальной переменной} P2; {Вызов процедуры} writeln(x); {Вывод значения глобальной переменной} end.
Не смотря на то, что при вызове процедуры P2 выполнится инструкция x:=10; глобальная переменная x останется равной 5.
Следующий раздел:
Предыдущий раздел: