|
Використання динамічних та варіантних структур даних.
Для роботи з динамічними структурами даних 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 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Введення початкових залишків по зарплаті | | | Динамічні масиви |