Работа с динамической памятью и указателями в системе Turbo Pascal. Мирецкий И.Ю - 5 стр.

UptoLike

Составители: 

New(Buf2);
Этот оператор выделит в памяти 256-байтовый буфер и его адрес поместит в Buf2.
Ссылка на динамическую переменную, на которую указывает переменная указатель, записывается
в виде переменной указателя, после которой ставится символ указателя (^); оператор ^ (разыменование)
позволяет использовать данные, на которые указывает Buf2.
Например, необходимо поместить строку и в Buf1 и в буфер, на
который указывает Buf2:
Buf1 : = 'Эта строка помещается в Buf1';
Buf2^ : = 'Эта строка помещается по указателю Buf2';
Здесь Buf2 означает 4-байтовую переменную указателя, а Buf2^ 256-байтовую строковую переменную,
адрес которой содержит Buf2.
Другие примеры ссылок на динамические переменные:
P1^,
P1^.Sibling^,
Results[1].Data^.
Для освобождения памяти, на которую указывает переменная указатель, используется процедура
Dispose. После освобождения памяти следует присвоить указателю значение nil (указатель
ни на что не
указывает):
Dispose(Buf2);
Buf2 := nil;
Помимо процедуры New, переменной указателя можно присвоить значение с помощью оператора
@ или функции Ptr. Оператор @ устанавливает переменную указателя на область памяти, содержащую су-
ществующую переменную, включая и те переменные, которые имеют идентификаторы. Функция Ptr ус-
танавливает переменную указатель на определенный адрес в памяти.
Оператор @ возвращает адрес
заданной переменной. Если Sum переменная целого типа, то @Sum
- адрес в памяти этой переменной. Аналогично, если ChrPtr - это указатель на тип Сhar, то ChrPtr^ - это
символ, на который указывает ChrPtr.
3. Оператор @
Оператор @ является унарным оператором, в качестве операнда которого используется ссылка на
идентификатор переменной, процедуры или функции; операнду возвращается указатель. Тип этого значе-
ния
является таким же, как тип указателя nil, и, таким образом, его можно присвоить любому указателю.
Пример использования оператора @ для переменной.
Введем объявления
type
TwoChar = array [0 .. 1] of Char;
var
Int : Integer;
TwoCharPtr : ^TwoChar;
Тогда строка
TwoCharPtr := @Int;
приводит к тому, что TwoCharPtr указывает на Int. TwoCharPtr^ становится повторной интерпретацией
значения Int, как если бы она была символьным массивом array[0 .. 1] of Char.
       New(Buf2);

Этот оператор выделит в памяти 256-байтовый буфер и его адрес поместит в Buf2.

        Ссылка на динамическую переменную, на которую указывает переменная указатель, записывается
в виде переменной указателя, после которой ставится символ указателя (^); оператор ^ (разыменование)
позволяет использовать данные, на которые указывает Buf2.
        Например, необходимо поместить строку и в Buf1 и в буфер, на который указывает Buf2:

       Buf1 : = 'Эта строка помещается в Buf1';
                         Buf2^ : = 'Эта строка помещается по указателю Buf2';

Здесь Buf2 означает 4-байтовую переменную указателя, а Buf2^ 256-байтовую строковую переменную,
адрес которой содержит Buf2.

       Другие примеры ссылок на динамические переменные:

       P1^,
       P1^.Sibling^,
       Results[1].Data^.

        Для освобождения памяти, на которую указывает переменная указатель, используется процедура
Dispose. После освобождения памяти следует присвоить указателю значение nil (указатель ни на что не
указывает):

       Dispose(Buf2);
       Buf2 := nil;

         Помимо процедуры New, переменной указателя можно присвоить значение с помощью оператора
@ или функции Ptr. Оператор @ устанавливает переменную указателя на область памяти, содержащую су-
ществующую переменную, включая и те переменные, которые имеют идентификаторы. Функция Ptr ус-
танавливает переменную указатель на определенный адрес в памяти.
         Оператор @ возвращает адрес заданной переменной. Если Sum переменная целого типа, то @Sum
- адрес в памяти этой переменной. Аналогично, если ChrPtr - это указатель на тип Сhar, то ChrPtr^ - это
символ, на который указывает ChrPtr.


                                               3. Оператор @
        Оператор @ является унарным оператором, в качестве операнда которого используется ссылка на
идентификатор переменной, процедуры или функции; операнду возвращается указатель. Тип этого значе-
ния является таким же, как тип указателя nil, и, таким образом, его можно присвоить любому указателю.
        Пример использования оператора @ для переменной.
        Введем объявления

         type
            TwoChar = array [0 .. 1] of Char;
       var
            Int : Integer;
            TwoCharPtr : ^TwoChar;

       Тогда строка

            TwoCharPtr := @Int;

приводит к тому, что TwoCharPtr указывает на Int. TwoCharPtr^ становится повторной интерпретацией
значения Int, как если бы она была символьным массивом array[0 .. 1] of Char.