Память переменным, описанным в каком-либо блоке, выделяется при активизации этого блока, т.е. при старте программы или при обращении к подпрограмме. Однако эти поля памяти ничем не заполнены, их содержимое - случайная комбинация битов. Заполнение полей памяти конкретным содержимым производится в дальнейшем в процессе работы программы с помощью процедуры ввода или оператора присваивания.
В ряде случаев необходимо, чтобы переменные до начала их обработки имели определенные начальные значения, например, нулевые. Это можно было бы сделать с помощью операторов присваивания в начальной части программы.
Турбо Паскаль дает возможность, описывая переменные, сразу же указывать их начальные (стартовые) значения. Единственным требованием при этом является то, что описание переменных должно быть перенесено из раздела Var в раздел Const. Переменные с заданным начальным значением называются в Турбо Паскале типизированными константами. При старте программы эти значения уже будут содержаться в полях памяти, отведенных для типизированных констант. В дальнейшем значения таких констант могут быть изменены в программе таким же образом, как и значения обычных переменных. В связи с этим типизированные константы называют также переменными с начальным значением.
Простые значения типизированным константам задаются приравниванием после описания типа.
Пример 1.
Const Max : integer = 10000;
T : real = 0;
S : string = 'abcd';
ch : char = #27;
Для одномерных массивов стартовые значения задаются путем перечисления их элементов в круглых скобках, причем эти значения должны быть заданы для всех элементов массива.
Пример 2.
TypeAr = array[1..10] of integer;
Const T : Ar = (0,0,0,1,1,1,-1,-1,-1,0);
Стартовые значения для матриц задаются аналогично, но в этом случае каждая строка матрицы окаймляется отдельной парой круглых скобок.
Пример 3.
TypeMatrix = array[1..4,1..6] of integer;
Const A : Matrix = ((0,0,0,1,1,1), (-1,-1,-1,0,0,0),
(1,2,3,4,5,6), (-3,-4,-1,1,1,5));
Имеются также правила задания стартовых значений для записей, множеств и переменных других типов. Здесь эти правила не рассматриваются.
При старте программы память выделяется для всех типизированных констант вне зависимости от их расположения - в основной программе или в подпрограмме. Эта память выделяется в сегменте данных, т.е. в той же области, которая используется для размещения глобальных переменных. Поэтому адреса полей памяти, соответствующих типизированным константам (переменным с начальным значением) не изменяются в течение всего периода работы программы. Следовательно, если типизированная константа описана в блоке подпрограммы, то при повторном входе в подпрограмму ей, в отличие от локальных переменных, память повторно не выделяется, при этом сохраняется предыдущее значение типизированной константы.
Рекомендуется обратить внимание на следующее полезное применение типизированных констант.
При разработке программы формирования меню тексты позиций меню целесообразно оформить в виде массива строк. Поскольку эти тексты в программе не изменяются, то они представляют собой массив констант. В Паскале массивы констант не допускаются, но могут быть организованы массивы типизированных констант.
Список дней в месяцах в виде типизированной константы MonthDays более компактен по сравнению с присваиванием значений отдельно каждому месяцу в разделе операторов. Если же при обработке календарной задачи будет определен високосный год, то количество дней в феврале легко изменить оператором присваивания: MonthDays[2]:=29.
Пример 5.Определить количество вызовов процедуры, к которой многократно обращаются из различных мест вызывающих программ.