![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример фрагмента программы
var IntPointer: ^ Integer; При первом вызове New в динамически распределяемой памяти выделяется 2 байта, и на них устанавливается указатель IntPointer. Второй вызов New выделяет другие 2 байта, и IntPointer устанавливается на них. Теперь у вас нет указателя, ссылающегося на первые 2 байта, поэтому вы не можете их освободить. В программе эти байты будут потеряны. Присваивание значений указателю Для инициализации указателей существует несколько возможностей. · процедура new отводит блок памяти в области динамических переменных и сохраняет адрес этой области в указателе; · специальная операция @ ориентирует переменную-указатель на область памяти, содержащую уже существующую переменную. Эту операцию можно применять для ориентации на статическую и динамическую переменную. type A=array[0..99] of char; Объявлены переменные разных типов: массив из 50 целых чисел и указатель на массив символов. Чтобы указатель pA указывал на массив X, надо присвоить ему адрес X pA: = @ X; · Существует единственная константа ссылочного типа nil, которая обозначает «пустой» адрес. Ее можно присваивать любому указателю. · Переменной-указателю можно присвоить значение другого указателя того же типа. Используя указательный тип pointer как промежуточный, можно присвоить значение одного указателя другому при несовпадении типов. Операции с указателями Для указателей определены только операции присваивания и проверки на равенство и неравенство. В Паскале запрещаются любые арифметические операции с указателями, их ввод-вывод и сравнение на больше-меньше. Еще раз повторим правила присваивания указателей: · любому указателю можно присвоить стандартную константу nil, которая означает, что указатель не ссылается на какую-либо конкретную ячейку памяти; · указатели стандартного типа pointer совместимы с указателями любого типа; · указателю на конкретный тип данных можно присвоить только значение указателя того же или стандартного типа данных. Указатели можно сравнивать на равенство и неравенство, например: If p1=p2 then ….. В Паскале определены стандартные функции для работы с указателями: · addr(x) – тип результата pointer, возвращает адрес x (аналогично операции @), где x – имя переменной или подпрограммы; · seg(x) – тип результата word, возвращает адрес сегмента для x; · ofs(x) – тип результата word, возвращает смещение для x; · ptr(seg, ofs) – тип результата pointer, по заданному сегменту и смещению формирует адрес типа pointer.
|