Покажчики delphi

Покажчики - тема досить складна для новачка, а додатки Delphi можна соз-

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

PInt = ^ Integer; // PInt - покажчик на Integer

Foo = record // Тип - запис

PFoo = ^ Foo; // PFoo - покажчик на об'єкт типу foo

Програмісти на мові C ++ можуть помітити схожість оператора ^ Object Pascal і оператора * мови C ++. Тип Pointer в Object Pascal відповідає типу void * мови C.

Коли покажчик не вказує ні на що (його значення дорівнює 0), то про таке покажчику кажуть, що його значення дорівнює Nil, а сам покажчик називають нульовим, або порожнім покажчиком.

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

New (Rec); // Виділити пам'ять для нового запису Rec

Rec ^ .I: = 10; // Помістити в неї дані. Зверніть увагу

Rec ^ .S: = 'And now for something completely different.';

Dispose (Rec); // Не забувайте звільняти пам'ять!

end.Когда використовувати функцію New ()

Функція New () використовується при виділенні пам'яті для покажчика на структуру дан них відомого розміру. Оскільки компілятору відомий розмір структури, для кото рій необхідно виділити пам'ять, то при виконанні функції New () буде розбраті делено достатню кількість байтів, причому такий спосіб виділення більш кор ректа і безпечний, ніж виклик функції GetMem () або AllocMem () . У той же час, ніколи не використовуйте функцію New () для виділення пам'яті для типів Pointer або PChar, так як в цьому випадку компілятор невідомо, яка кількість пам'яті долж- але бути виділено. І не забувайте використовувати функцію Dispose () для освобожде- ня пам'яті, виділеної за допомогою функції New ().

Для виділення пам'яті структурам, розмір яких на етапі компіляції ще не через

вестен, використовуються функції GetMem () і AllocMem (). Наприклад, компілятор не може визначити заздалегідь, скільки пам'яті потрібно буде виділити для структур, зада- ваемих змінними типу PChar або Pointer, що пов'язано з самою природою цього типу даних. Найважливіше - не намагатися маніпулювати кількістю пам'яті, великим, ніж було виділено реально, оскільки найбільш імовірним результатом таких дій буде помилка доступу до пам'яті (access violation). Для звільнення пам'яті, виділеної за допомогою вищезазначених функцій, використовуйте функцію FreeMem (). До речі, для виділення пам'яті краще користуватися функцією Al- locMem (), так як вона завжди инициализирует виділену пам'ять нульовими значеннями.

Один з аспектів роботи з покажчиками в Object Pascal, який істотно від Ліча від роботи з ними в мові C, - це їх найсуворіша типізація. Так, в приве денном нижче прикладі змінні a і b не сумісні за типом.

У той же час в еквівалентному описі на мові C ці змінні цілком зі

PtrInteger = ^ Integer; // Створити іменований тип

a, b: PtrInteger; // Тепер a і b сумісні за типом

Схожі статті