Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Структура программы. Стандартные типы данных (теория)

.pdf
Скачиваний:
13
Добавлен:
13.03.2016
Размер:
733.75 Кб
Скачать

Стандартные типы данных

В дальнейшем в тексте программы с типизированными константами можно обращаться как с обычными переменными, изменяя, когда требуется, их значения (соответствующая директива компилятора $J+ устанавливается по умолчанию).

2.7. Переменные

Переменная – идентификатор, обозначающий некоторую область в памяти, в которой хранится значение переменной. Это значение может изменяться в ходе выполнения программы. Раздел объявления переменных имеет вид:

var

<список идентификаторов переменных>: <тип>;

Можно указывать не одно, а множество объявлений переменных. Каждое объявление в списке может содержать список идентификаторов переменных, разделяемых запятыми, или один идентификатор. Указываемый в объявлении тип может быть одним из встроенных типов, типом, ранее определенным программистом, или непосредственным описанием вводимого программистом типа.

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

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

~ 21 ~

Стандартные типы данных

2.8. Инициализация переменных

Тип переменных определяется пользователем в разделе описания переменных. В откомпилированной программе для всех переменных отведено место в памяти, и всем переменным присвоены нулевые значения.

Инициализация переменных (задание начальных значений переменным) производится одновременно с их описанием. Для этого в стандарте языка Pascal используется конструкция вида имя переменной: тип = значение; которая должна быть размещена в разделе описания констант, например:

const

rWeight: real = 0.4;

В 32-разрядных версиях Delphi глобальные переменные можно инициализировать при объявлении. Инициализированная переменная получает присвоенное ей значение один раз – в начале выполнения программы. Потом же она хранит последнее присвоенное ей значение. Синтаксис инициализации:

var

имя: тип = значение;

Локальные переменные (описываемые в теле подпрограммы) подобным образом инициализировать нельзя. Но им можно присвоить начальные значения, используя локальные типизированные константы.

~ 22 ~

Стандартные типы данных

2.9. Совместимость и преобразование типов

Как и в стандарте языка Pascal, в Object Pascal и Delphi определены понятия эквивалентности и совместимости типов.

Два типа Т1 и Т2 являются эквивалентными (идентичными), если выполняется одно из двух условий:

Т1 и Т2 представляют собой одно и то же имя типа;

тип Т2 описан с использованием типа Т1 с помощью равенства

или последовательности равенств. Например:

type

T1 = integer;

T2 = T1;

T3 = T2;

Менее строгие ограничения определены совместимостью типов. Например, типы являются совместимыми, если:

они эквивалентны;

оба типа являются вещественными типами;

оба типа являются целыми типами;

один тип является поддиапазоном другого;

оба типа являются отрезками одного и того же базового типа;

оба типа являются множественными с совместимыми базовыми типами;

один тип – этот тип Pointer, а другой – любой ссылочный тип.

Кроме этого, существует понятие совместимости по присваиванию. По стандарту ISO 7185 значение типа T1 совместимо по присваиванию с типом T2 (то есть допустимым является оператор присваивания T1:=T2;),

если выполняется одно из следующих условий:

~ 23 ~

Стандартные типы данных

T1 и T2 имеют тождественные типы и ни один из них не является файловым типом или структурным типом, содержащим компонент с файловым типом на одном из своих уровней;

T1 и T2 являются совместимыми порядковыми типами и значения

T2 попадают в диапазон возможных значений T1;

T1 и T2 являются вещественными типами и значения T2 попадают в диапазон T1;

T1 является вещественным типом, а T2 является целочисленным типом;

T1 и T2 являются строковыми типами;

T1 является строковым типом, а T2 является символьным типом;

T1 и T2 являются совместимыми множественными типами и все члены значения типа T2 попадают в диапазон возможных значений

T1;

T1 и T2 являются совместимыми типами указателей;

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

var

x: Type1; y: Type2; begin

y:=Type2(x); {x интерпретируется как значение типа Type2} end.

Допускается выполнять и приведение типа значения. Приведение типа значения производится с помощью конструкции вида:

Имя_типа(выражение).

Типы выражения и задаваемый тип должны быть перечисляемыми типами или указателями. Для перечисляемых типов результирующее значение получается путем преобразования выражения и его проверки

~ 24 ~

Стандартные типы данных

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

Например, приведение типа integer('A') даст значение кода символа 'A' в двухбайтном представлении целого числа (значение 65), а byte(534) даст значение 22, поскольку целое число 534 имеет тип word и занимает два байта, а тип byte занимает один байт, и в процессе приведения старший байт будет отброшен, boolean(0) – false.

~ 25 ~