Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Типізовані покажчики

Використання динамічних та варіантних структур даних.

Для роботи з динамічними структурами даних Turbo Pascal пропонував два види вказівних типів – типізовані покажчики і нетипізовані.

Не типізований покажчик є змінною, в якій зберігається адреса деякої області пам'яті деякого розміру, і призначений для зберігання довільних даних. Типізовані покажчики указують на місце в пам'яті, де зберігаються дані певного типу.

У Delphi збережені всі можливості роботи з покажчиками, а також додані нові структури даних на їх основі.

Типізовані покажчики

Змінні – не типізовані покажчики, описуються з вказівкою типу Pointer, а виділення і звільнення пам'яті під них здійснюється, відповідно, командами GetMem і FreeMem (див. лістинг 1).

Лістинг 1. Використання змінних-покажчиків, що не типізуються

Program Usingpointers,

Var

Point: Pointer; { Опис змінної-покажчика вказано тип Pointer, тобто описується посилання, що не типізується }

Begin

Getmem(Point, 1024); {Виділення пам'яті під змінну-покажчик розміром 1024 Байт}

Freemem(Point, 1024) {Звільнення пам'яті, зайнятої під змінну-покажчик}

End.

Типізовані покажчики

Використання не типізованих покажчиків обмежене стандартними функціями, що приймають такі змінні як параметри, а також низькорівневим програмуванням. Більш цікавими для розгляду є типізовані покажчики.

Для опису посилання, що типізується, не передбачений який-небудь спеціальний тип даних, на відміну від не типізованих покажчиків. Оскільки змінна такого роду завжди указує на дані конкретного типу, то її опис і будується на основі цього типу. Для вказівки на посилальну природу змінних використовується оператор «^», і опис виглядає таким чином:

Var

<Змінна>: ^<назва типу>;

Або в розділі опису типів даних:

Турe

<Новий тип даних> = ^<Тип даних>;

Після опису змінної-покажчика під неї виділяється пам'ять тільки для зберігання адреси, а під самі дані, на які змінна указує, пам'ять не виділяється. Для ініціалізації змінної використовується процедура New, відмінністю якої від аналогічної процедури GetMem, використовуваної для роботи з нетипізованими покажчиками, є відсутність другого параметра, що визначає розмір пам'яті, який виділяється. Це пов'язано з тим, що типізоване посилання указує на дані відомого типу, відповідно, розмір цих даних також відомий компілятору.

Отже, ініціалізація змінної виглядає таким чином:

New(<Типізований покажчик>);

Відповідно, при звільненні пам'яті, зайнятої під типізований покажчик використовується процедура Dispose - аналог процедури Freemem без другого параметра:

Dispose (<Типізований покажчик>);

Звернення до змінної-покажчика відбувається звичайним способом - по її імені, а для звернення до даних, на які змінна указує, після імені змінної указується оператор розіменування «^»:

<Назва змінної>^

Розглянемо приклад роботи з типізованим посиланнямя, вказуючим на змінну типу Double (див. лістинг 2).

Лістинг 2. Приклад роботи з типізованим посиланням

Program Usingtypedpointers;

Турe

pdouble = ^double; {Опис типу даних–покажчика на змінну типу Double}

Var

Mypdouble: pdouble; { Опис змінної – типізованого покажчика на змінну типу duble}

Begin

New(Mypdouble);

{Виділення місця в динамічній пам'яті під одну змінну типу Double (розмір необхідної пам'яті визначається автоматично), адреса виділеної пам'яті заноситься в змінну МyРDuble}

Mypdouble = 12.8;

{Присвоєння змінній, на яку посилається змінна-покажчик значення 12.8}

Dispose(Mypdouble);

{ Звільнення пам'яті, зайнятої під змінну, на яку указує змінна Mypdouble. Адреса звільненої пам'яті залишається в змінній Mypdouble, але її використання не допустимее}

End.


Дата добавления: 2015-07-11; просмотров: 173 | Нарушение авторских прав


Читайте в этой же книге: Автоматизація розрахунків з підзвітними особами | Опис вихідних документів | Приклад розв’язування системи лінійних рівнянь | Завдання | Одержання та дослідження колоїдних розчинів срібла. | Кадровий облік | Звіти з кадрового обліку, з нарахування і виплати зарплати | Нарахування зарплати | Особливості обліку ПДФО | Виплата зарплати |
<== предыдущая страница | следующая страница ==>
Введення початкових залишків по зарплаті| Динамічні масиви

mybiblioteka.su - 2015-2024 год. (0.007 сек.)