align="justify"> Чим більше розмір динамічної змінної, тим менше частка накладних витрат. Наприклад, при зберіганні у динамічній пам'яті масивів великих розмірів зайві 4 байти, витрачені на покажчик, несуттєві. p align="justify"> покажчик динамічний пам'ять адресація
4. Оголошення покажчиків
Як правило, у Турбо Паскалі покажчик зв'язується з деяким типом даних. Такі покажчики будемо називати типізований. Для оголошення типизированного покажчика використовується значок А, який поміщається перед відповідним типом, наприклад:
var: ^ integer;
р2: ^ real; = ^ PerconRecord; = record: string;: string;: PerconPointer;
Зверніть увагу: при оголошенні типу PerconPointer ми послалися на PerconRecord, який попередньо в програмі оголошений не був. Як вже зазначалося, в Турбо Паскалі послідовно проводиться в життя принцип, відповідно до якого перед використанням будь-якого ідентифікатора він повинен бути описаний. Виняток зроблено тільки для покажчиків, які можуть посилатися на ще не оголошений тип даних. Це виключення зроблено не випадково. Динамічна пам'ять дає можливість реалізувати широко використовується в деяких програмах організацію даних у вигляді списків. Кожен елемент списку має у своєму складі покажчик на сусідній елемент, що забезпечує ливість перегляду і корекції списку. Якби у Турбо Паскалі не було цього винятку, реалізація списків була б значно ускладнена. br/>В
У Турбо Паскалі можна оголошувати покажчик і не пов'язувати його при цьому з будь-яким конкретним типом даних. Для цього служить стандартний тип POINTER, наприклад:
р: pointer;
Покажчики такого роду будемо називати нетипізований. Оскільки нетипізовані покажчики не пов'язані з конкретним типом, з їх допомогою зручно динамічно розміщувати дані, структура і тип яких змінюються в ході роботи програми. p align="justify"> Як вже говорилося, значеннями покажчиків є адреси змінних в пам'яті, тому слід було б очікувати, що значення одного укаателя можна передавати іншому. Насправді це не зовсім так. У Турбо Паскалі можна передавати значення тільки між покажчиками, пов'язаними з одним і тим же типом даних. Якщо, наприклад,
var
p1, p2: ^ integer;
р3: ^ real;
рр: pointer;
то присвоювання
р1: = р2;
цілком припустимо, в той час як
р1: = р3;
заборонено, оскільки Р1 і Р3 вказують на різні типи даних. Це обмеження, однак, не поширюється на нетипізовані покажчики, тому ми могли б записати
: = р3;
р1: = рр;
...