Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К2_Допматериалы_15апр.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.99 Mб
Скачать

16

Адресные типы

Оперативную память компьютера можно представить в виде набора ячеек, каждая из которых имеет свой собственный адрес. Для задания этого адреса используются 4-х байтовые переменные следующих типов:

  • Указатели (тип Pointer)

Нетипизированный указатель. Переменная задает адрес конкретной ячейки оперативной памяти.

  • Ссылки (<имя_типа>=^<базовый_тип>)

Типизированный указатель. Переменная задает адрес значения базового типа.

  • ОПИСАНИЕ ССЫЛКИ:

TYPE

pT=^T;

Var

p:pT;

  • T - имя базового типа

  • pT – имя ссылочного типа, задающего адрес значения типа Т

  • p - переменная-ссылка

Ссылка

Расположена в сегменте данных или стеке

Динамическая переменная

Может быть размещена в любой области памяти (обычно - в куче)

Рис. 1. Ссылка на значение

  • ПРИМЕР 1. ОПИСАНИЕ ССЫЛОЧНЫХ ТИПОВ.

TYPE

ARR=ARRAY[1..5] of Integer;{базовый тип - массив}

COMPL=RECORD {базовый тип - запись}

X,Y:REAL

END;

pCompl=^Compl; {описание типа «ссылка на запись»}

Var

PInt: ^Integer; {ссылка на целое, 4 байта; рис. 2a}

pc: pCompl; {ссылка на запись, 4 байта; рис. 2b}

pa:^ARR; {ссылка на массив целых, 4 байта; рис. 2c}

ap: Array[1..5] of ^Integer; {массив ссылок на целые, 20 байтов; рис. 2d}

Рис. 2. Примеры ссылок (a - ссылка на целое, b - ссылка на запись, c - ссылка на массив, d - массив ссылок)

  • При определении ссылки недопустимо конструировать базовый тип, вместо этого следует использовать его идентификатор:

TYPE

ARR=ARRAY[1..5] of Integer;

Var

pa:^ARR; //корректное описание ссылки

pb:^ARRAY[1..5] of Integer; //некорректное описание ссылки

Таким образом, разделяются понятия ссылок и данных, на которые они указывают.

С помощью ссылочных типов можно обратиться к ячейкам, расположенным вне сегмента данных, и работать с хранящимися в них значениями.

  • Константа NIL задает пустую ссылку (ссылку, которая ни на что не указывает).

  • ДОПУСТИМЫЕ ОПЕРАЦИИ НАД ЗНАЧЕНИЯМИ АДРЕСНЫХ ТИПОВ

  • Сравнение (= , <>)

Ограничение для ссылок: ссылки должны указывать на значения одного типа.

  • Присваивание

Ограничение для ссылок: ссылки должны указывать на значения одного типа.

  • Разыменование (^)

Используется для перехода от ссылочной переменной к значению, на которое она указывает.

Неприменима к значениям типа Pointer (неизвестен тип значения, хранящегося по заданному адресу).

  • Тип Pointer совместим по присваиванию со всеми ссылочными типами.

  • ФУНКЦИИ ДЛЯ РАБОТЫ С АДРЕСНЫМИ ТИПАМИ

  • ТАБЛИЦА 1. Функции для работы с адресами памяти в Delphi*.

Addr(var x):Pointer

операция @x:Pointer

Ссылка на начало объекта X в памяти

Ptr(Address:Integer):Pointer

Ссылка на ячейку памяти, заданную параметром Address.

SizeOf(var x):Integer

Размер объекта X в байтах

*Особенности использования подпрограмм в других версиях языка Pascal см. в соответствующих справочных системах.