Revision 3 of 7, by Kai Burghardt on 2-18-2023. The page as it is now.
^/ru
<div style="float:left; margin: 0 25px 20px 0; padding:40px; font-size:500%; font-family: Georgia; background-color: #f9f9f9; border: 2px solid #777777;">
^
</div>
В кодировках ASCII и Unicode символ с десятичным кодом 94 (или шестнадцатеричным 5E) определен как символ ^ (Circumflex accent).
Для любого типа данных тип pointer для этих данных может быть объявлен с помощью оператора ^ перед типом данных.
\
program pointerDemo(input, output, stderr);
type
listItem = record
payload: integer;
// следующий пункт по элементу списка
next: ^listItem;
end;
var
start: ^listItem;
begin
new(start);
if not assigned(start) then
begin
writeLn(stderr, 'не удалось получить память для start');
halt(1);
end;Содержимое pointer можно отслеживать, разыменовывая его путем добавления [символа] ^ к идентификатору. Вместо того, чтобы имеющегося у вас на руках адреса памяти, вы сможете посмотреть на содержимое памяти по этому адресу. Если это типизированный указатель, операции и синтаксис для этого типа корректны, например, операция присвоения в следующем примере.
// разыменование указателя, т.е. его отслеживание
start^.payload := 7;
dispose(start);
end.Однако попытка отследить nil'евой указатель приведет к ошибке времени выполнения (RTE 216 “general protection fault”). В такой ситуации условиеnot assigned(start) в строке 15 предназначено для отлова [этой коллизии].
См.также
- {$pointerMath off} запрещает использование указателей в арифметических выражениях
- {$typedAddress on} в сочетании с оператором получения адреса @
- {$modeSwitch autoDeref-} - автоматическое (тихое) разыменование типизированных указателей
From the Free Pascal wiki, page "^/ru", as it stood on 2023-02-18 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.
