/
n-dimens
/
pascalabcnet
Обзор
Документация
Войти
/
n-dimens
/
pascalabcnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
PABCNetHelp/LangGuide/Types/pointers.html
68 строк
4 KB
samuraiGH
adding working-tree-encoding attribute (#3325)
07 ноя 2025, 16:12
Не верифицирован
07 ноя 2025, 16:12
cf1fd29
Код
Авторство
О чём код?
<html> <head> <object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param name="Keyword" value="Типизированные указатели"> <param name="Keyword" value="Бестиповые указатели"> <param name="Keyword" value="pointer"> <param name="Keyword" value="nil"> </object> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title></title> <link rel="StyleSheet" href="../../default.css"> </head> <body> <H1>Указатели</H1> <p>Указатель - это ячейка памяти, хранящая адрес. В <b> PascalABC.NET</b> указатели делятся на <b><font color="#FF0000"><i> типизированные</i></font></b> (содержат адрес ячейки памяти данного типа) и <b> <font color="#FF0000"><i>бестиповые</i></font></b> (содержат адрес оперативной памяти, не связанный с данными какого-либо определенного типа).</p> <p>Тип указателя на тип <code>T</code> имеет форму <code>^T</code>, например:</p> <blockquote> <p><code><b>type</b> pinteger = ^integer;<br> <b>var</b> p: ^<b>record</b> r,i: real <b>end</b>;</code></p> </blockquote> <p>Бестиповой указатель описывается с помощью слова <code>pointer</code>.</p> <p>Для доступа к ячейке памяти, адрес которой хранит типизированный указатель, используется <b><font color="#FF0000"><i>операция разыменования</i></font></b> <code>^</code>:</p> <blockquote> <p><code><b>var</b> <br> i: integer;<br> pi: ^integer;<br> ...<br> pi := @i; // указателю присвоили адрес переменной i<br> pi^ := 5; // переменной i присвоили 5 </code></p> </blockquote> <p>Операция разыменования не может быть применена к бестиповому указателю.</p> <p>Типизированный указатель может быть неявно преобразован к бестиповому:</p> <blockquote> <p><code><b>var</b> <br> p: pointer;<br> pr: ^real;<br> ...<br> p := pr;</code></p> </blockquote> <p>Обратное преобразование также может быть выполнено неявно:</p> <blockquote> <p><code>pr := p;<br> pr^ := 3.14;</code></p> </blockquote> <p>Указатели можно сравнивать на равенство (<code>=</code>) и неравенство (<code><></code>). Для того чтобы отметить тот факт, что указатель никуда не указывает, используется стандартная константа <b><code>nil</code></b> (нулевой указатель) : <code>p :=<b> nil</b></code>.</p> <p><font color="#FF0000"><b>Внимание!</b></font> Ввиду особенностей платформы .NET тип <code>T</code> типизированного указателя не должен быть ссылочным или содержать ссылочные типы на каком-то уровне (например, запрещены указатели на записи, у которых одно из полей имеет ссылочный тип). Причина такого ограничения проста: указатели реализуются неуправляемым кодом, который не управляется сборщиком мусора. Если в памяти, на которую указывает указатель, содержатся ссылки на управляемые переменные, то они становятся недействительными после очередной сборки мусора. Исключение составляют динамические массивы и строки, обрабатываемые особым образом. То есть, можно делать указатели на записи, содержащие в качестве полей строки и динамические массивы.</p> </body> </html>