Sign in Join
Wiki copytemporary

Variable/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Variable/ru

OldNewLine
1+**Переменные** - это символьные последовательности, которые определяет программист и для которых выделяется память ([[Integer/ru|integer]], [[Char/ru|char]] и т.д.). Они могут находится в области видимости всей программы ([[Global variables/ru|глобальные переменные]]) или только внутри процедуры, функции, метода ([[Local variables/ru|локальные переменные]]).
2+
3+## Объявление
4+
5+Переменные объявляются в секции [[Var|var]]. В [[Pascal|Паскале]] каждая переменная имеет [[Data type/ru|тип данных]], известный уже на этапе [[Compile time|времени компиляции]] (и пусть это будет тип данных [[Variant|variant]]). Переменная объявляется парой $`(\text{identifier}, \text{data type identifier})`$, разделенной [[Colon|двоеточием]]:
6+
7+``` pascal
8+var
9+ foo: char;
10+```
11+
12+В соответствии с требованиями к пространству типа данных соответствующий объем памяти резервируется в стеке, как только вводится соответствующая [[Scope|область видимости переменной]]. В зависимости от того, где находится `var`-секция, вы можете говорить о [[Global variables/ru|глобальных]] или [[Local variables/ru|локальных]] переменных.
13+
14+## Управление
15+
16+Переменные обрабатываются [[Becomes/ru|оператором присваивания :=]]. Кроме того, ряд встроенных процедур присваивает значения переменной неявно:
17+
18+- процедуры ввода/вывода, такие как, `get` и `put`, [[Read|read]] и `readLn`, `assign` и `close`
19+- `new` и `dispose` при обработке [[Pointer/ru|указателей]] на [[Object|объекты]]
20+- `setLength` при обработке [[Dynamic array/ru|динамических массивов]]
21+
22+## Определение
23+
24+Переменная может быть определена, то есть объявлена и инициализирована за один раз при выполнении следующего.
25+
26+``` pascal
27+var
28+ x: integer = 42;
29+```
30+
31+Обратите внимание, этот синтаксис не является оригинальным Паскалем. В Паскале декларации и назначения отделены от дизайна. Этот синтаксис нарушает этот принцип.
32+
33+## Доступ
34+
35+Доступ к переменной означает, что значение в указанной позиции памяти читается просто при указании ее идентификатора (везде, где ожидается [[expression|выражение]]).
36+
37+Обратите внимание, что существует пара типов данных, которые на самом деле являются указателями, но на которые автоматически отменяются ссылки, включая, но не ограничиваясь, [[Class|классы]], динамические массивы и [[AnsiString|строки ANSI]]. С \[директивой компилятора\] `{$modeSwitch autoDeref+}` (не рекомендуется) также типизированные указатели молча освобождаются от ссылки без применения [[^/ru|^ (символа шапочки)]]. Это означает, что вы не обязательно работаете с реальным блоком памяти где-то еще, с которым переменная действительно связана.
38+
39+Обычно блок памяти переменной интерпретируется в соответствии с ее типом данных, как он был объявлен. С помощью [[Typecast/ru|приведения типов]] интерпретация блока памяти данной переменной может быть изменена (для выражения).
40+
41+## Псевдоним памяти
42+
43+В сочетании с [[Keyword/ru|ключевым словом]] [[Absolute/ru|absolute]] идентификатор может быть связан с ранее зарезервированным большим двоичным объектом памяти. Пока обычная пара $`(\text{идентификатор}, \text{тип данных})`$ фактически устанавливает определенный объем памяти в стороне, следующее объявление `c` не занимает дополнительного места, но связывает идентификатор `c` с блоком памяти, зарезервированным для `x`:
44+
45+``` pascal
46+var
47+ x: byte;
48+ c: char absolute x;
49+```
50+
51+Здесь псевдоним памяти использовался в качестве одной из многих стратегий, чтобы убедить [[Compiler|компилятор]] разрешить операции, допустимые для типа [[Char/ru|char]], в то время как основная память изначально была зарезервирована для [[Byte/ru|байта]]. Эта функция должна выбираться с умом. Это обязательно требует знания структуры памяти типа данных, чтобы ничто не вызывало какие-либо нарушения прав доступа.
52+
53+Самое главное, что память с дополнительными ссылками будет обрабатываться так, как если бы она была объявлена аккуратно. И никаких вопросов не было бы задано.
54+
55+## См.также
56+
57+- [[Constant/ru|константы]]
58+
59+---
60+*From the Free Pascal wiki, page "Variable/ru", as it stood on 2022-08-06 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
61+Category: Pascal/ru

Back to history