19789

Розподіл оперативної пам’яті. Вказівники види, об’явлення, операції

Доклад

Информатика, кибернетика и программирование

4.Розподіл оперативної памяті. Вказівники: види обявлення операції. Вказівником називається змінна яка містить в собі певниу адресу мається на увазі адресу в оперативній пам'яті. Як правило вказівники містять адресу деякої іншої змінної або виділеної д

Украинкский

2013-07-17

34.5 KB

3 чел.

4.Розподіл оперативної пам’яті. Вказівники: види, об’явлення, операції.

Вказівником називається змінна, яка містить в собі певниу адресу (мається на увазі адресу в оперативній пам'яті). Як правило вказівники містять адресу деякої іншої змінної або виділеної динамічно області пам'яті (кажуть: вказують або посилаються на цю змінну або область пам'яті).

Var 

P: Pointer; {объявляем переменную

-указатель}

S: Byte; {и некую переменную}

Begin
{ . . . }
P:= @S; {теперь P указывает на S}
{ . . . }
End.

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

Type 

<имя_типу_вказівника > = ^<тип>;

Для того, щоб звернутися за вказівником до області пам'яті, на яку він вказує використовують той же знак, але праворуч від змінної типу вказівник:

<вказівник > ^
Дана структура розглядається як змінна. Якщо <вказівник> є вказівник типізований, то тип цієї змінної відомий компілятору, в іншому випадку, як уже зазначалося, необхідно приведення типу даної змінної (її можна привести до будь-якого типу, так як розмір її не визначений).

Сама наявність будь-якого типу і навіть об'єктів (примірників, змінних) даного типу, цілком безглузда до тих пір, поки немає можливості присвоювати їм (об'єктів) значення і застосовувати операції.
Присвоєння значень вказівниками виробляється
a. оператором присвоювання безпосереднього адреси змінної, процедури або функції:
<вказівник>: = @ <ідентифікатор>;
в <вказівник> записується адреса змінної, типізований константи, процедури або функції (операція @ так і називається - "взяття вказівника") або
<вказівник1>: = <вказівник1>;
b. оператором присвоювання адресного вирази:
<вказівник>: = <адресний вираз>;
де <адресний вираз> є вираз, результатом обчислення якого є адреса (у формі вказівника) - вказівник, функція, яка повертає вказівник etc.
c. в результаті виконання операцій виділення пам'яті відповідними процедурами і функціями.

Особливе місце в безлічі значень вказівників займає "порожню адресу" - Nil. Він визначений завжди і, відповідно, з ним можна порівняти будь-який  вказівник. Вважається, що якщо вказівник дорівнює Nil, то змінна, на яку він вказує відсутня в ОП (відповідно, її не можна звідти видалити).

Значення вказівник можна інкрементіровать і декрементіровать, використовуючи, відповідно, Inc і Dec, причому для типізованих покажчиків проводиться збільшення або зменшення вмісту вказівника на розмір відповідного йому типу. На практиці це означає наступне. Припустимо в деякій області пам'яті (послідовно) розташовані кілька однотипних змінних, і є вказівник, який посилається на першу з них. Тоді збільшення вказівника за допомогою Inc призведе до того, що він буде посилатися на наступну зміну.

Над вказівниками також визначені операції порівняння на рівність (=) і нерівність (<>), інших порівнянь не допускається.

І, як говорилося вище, над вказівниками визначена операція "звернення по", результатом якої є область пам'яті (з типом або без), на яку посилається вказівник ^.