Variable/ru

From Free Pascal wiki

English (en) suomi (fi) русский (ru)

Переменные - это символьные последовательности, которые определяет программист и для которых выделяется память (integer, char и т.д.). Они могут находится в области видимости всей программы (глобальные переменные) или только внутри процедуры, функции, метода (локальные переменные).

Объявление

Переменные объявляются в секции var. В Паскале каждая переменная имеет тип данных, известный уже на этапе времени компиляции (и пусть это будет тип данных variant). Переменная объявляется парой [math](\text{identifier}, \text{data type identifier})[/math], разделенной двоеточием:

var
	foo: char;

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

Управление

Переменные обрабатываются оператором присваивания :=. Кроме того, ряд встроенных процедур присваивает значения переменной неявно:

Определение

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

var
	x: integer = 42;

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

Доступ

Доступ к переменной означает, что значение в указанной позиции памяти читается просто при указании ее идентификатора (везде, где ожидается выражение).

Обратите внимание, что существует пара типов данных, которые на самом деле являются указателями, но на которые автоматически отменяются ссылки, включая, но не ограничиваясь, классы, динамические массивы и строки ANSI. С [директивой компилятора] {$modeSwitch autoDeref+} (не рекомендуется) также типизированные указатели молча освобождаются от ссылки без применения ^ (символа шапочки). Это означает, что вы не обязательно работаете с реальным блоком памяти где-то еще, с которым переменная действительно связана.

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

Псевдоним памяти

В сочетании с ключевым словом absolute идентификатор может быть связан с ранее зарезервированным большим двоичным объектом памяти. Пока обычная пара [math](\text{идентификатор}, \text{тип данных})[/math] фактически устанавливает определенный объем памяти в стороне, следующее объявление c не занимает дополнительного места, но связывает идентификатор c с блоком памяти, зарезервированным для x:

var
	x: byte;
	c: char absolute x;

Здесь псевдоним памяти использовался в качестве одной из многих стратегий, чтобы убедить компилятор разрешить операции, допустимые для типа char, в то время как основная память изначально была зарезервирована для байта. Эта функция должна выбираться с умом. Это обязательно требует знания структуры памяти типа данных, чтобы ничто не вызывало какие-либо нарушения прав доступа.

Самое главное, что память с дополнительными ссылками будет обрабатываться так, как если бы она была объявлена аккуратно. И никаких вопросов не было бы задано.

См.также