^/ru: what changed
Revision 6 to 7. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | 1 | ^ | |
| 2 | 2 | ||
| 3 | 3 | В кодировках [[ASCII/ru|ASCII]] и [[FPC Unicode support/ru|Unicode]] символ с десятичным кодом `94` (или [[Hexadecimal/ru|шестнадцатеричным]] `5E`) определен как символ **^** (Circumflex accent). | |
| 4 | 4 | ||
| 5 | 5 | Для любого типа данных [[Pointer/ru|тип `pointer`]] для этих данных может быть объявлен с помощью оператора **^** перед [[Data type/ru|типом данных]]. | |
| 6 | 6 | ||
| 7 | 7 | ||
| 8 | 8 | ||
| 9 | 9 | ``` | |
| 10 | 10 | 1program pointerDemo(input, output, stderr); | |
| 11 | 11 | 2 | |
| 12 | 12 | 3type | |
| 13 | 13 | 4 listItem = record | |
| 14 | 14 | 5 payload: integer; | |
| 15 | 15 | 6 // следующий пункт по элементу списка | |
| 16 | 16 | 7 next: ^listItem; | |
| 17 | 17 | 8 end; | |
| 18 | 18 | 9 | |
| 19 | 19 | 10var | |
| 20 | 20 | 11 start: ^listItem; | |
| 21 | 21 | 12 | |
| 22 | 22 | 13begin | |
| 23 | 23 | 14 new(start); | |
| 24 | 24 | 15 if not assigned(start) then | |
| 25 | 25 | 16 begin | |
| 26 | 26 | 17 writeLn(stderr, 'не удалось получить память для start'); | |
| 27 | 27 | 18 halt(1); | |
| 28 | 28 | 19 end; | |
| 29 | 29 | ``` | |
| 30 | 30 | ||
| 31 | 31 | Содержимое `pointer` можно отслеживать, _разыменовывая_ его путем добавления [символа] `^` к [[Identifier/ru|идентификатору]]. Вместо того, чтобы имеющегося у вас на руках адреса памяти, вы сможете посмотреть на содержимое памяти _по_ этому адресу. Если это типизированный указатель, операции и синтаксис для этого типа корректны, например, операция [[Becomes/ru|присвоения]] в следующем примере. | |
| 32 | 32 | ``` | |
| 33 | 33 | 21 // разыменование указателя, т.е. его отслеживание | |
| 34 | 34 | 22 start^.payload := 7; | |
| 35 | 35 | 23 | |
| 36 | 36 | 24 dispose(start); | |
| 37 | 37 | 25end. | |
| 38 | 38 | ``` | |
| 39 | 39 | ||
| 40 | 40 | Однако попытка отследить [[Nil/ru|`nil`'евой]] указатель приведет к ошибке [[runtime error|времени выполнения]] (RTE 216 “general protection fault”). В такой ситуации условие`not assigned(start)` в строке 15 предназначено для отлова [этой коллизии]. | |
| 41 | 41 | ||
| 42 | 42 | ## См.также | |
| 43 | 43 | ||
| 44 | - | ||
| 45 | - | ||
| 46 | - | ||
| 44 | + | * [[sPointermath|`{$pointerMath off}`]] запрещает использование указателей в арифметических выражениях | |
| 45 | + | * [[sTypedaddress|`{$typedAddress on}`]] в сочетании с оператором получения адреса [[@/ru|`@`]] | |
| 46 | + | * [[sModeswitch|`{$modeSwitch autoDeref-}`]] \- автоматическое (тихое) разыменование типизированных указателей | |
| 47 | 47 | ||
| 48 | 48 | ||
| 49 | 49 | ||
| 50 | - | ||
| 51 | - | ||
| 52 | - | ||
| 53 | - | ||
| 54 | - | ||
| 55 | - | ||
| 56 | - | ||
| 57 | - | ||
| 58 | - | ||
| 59 | - | ||
| 60 | - | ||
| 50 | + | **navigation bar: topic: Pascal symbols** | |
| 51 | + | ||
| 52 | + | _single characters:_ [[Plus/ru|`+` (плюс)]] • [[Minus/ru|`-` (минус)]] • [[*/ru|`*` (звездочка)]] • [[Slash/ru|`/` (слеш)]] • [[Equal/ru|`=` (равно)]] • [[Greater than/ru|`>` (больше чем)]] • [[Less than/ru|`<` (меньше чем)]] • [[period/ru|`.` (точка)]] • [[Colon/ru|`:` (двоеточие)]] • [[;/ru|`;` (точка с запятой)]] • `^` (hat) • [[@/ru|`@` (at)]] • [[Dollar sign/ru|`$` (dollar sign)]] • [[&/ru|`&` (ampersand)]] • [[Hash/ru|`#` (hash)]] • [['/ru|`'` (single quote)]] | |
| 53 | + | ||
| 54 | + | _character pairs:_ [[Not equal/ru|`<>` (не равно)]] • [[Less than or equal/ru|`<=` (less than or equal)]] • [[Becomes/ru|`:=` (присвоить)]] • [[Greater than or equal/ru|`>=` (greater than or equal)]] • [[symmetric difference|`><` (symmetric difference)]] • [[Slash|`//` (double slash)]] | |
| 61 | 55 | ||
| 62 | 56 | --- | |
| 63 | 57 | *From the Free Pascal wiki, page "^/ru", as the Internet Archive kept it on 2022-08-16, last changed on 2022-08-06. 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).* |
