АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

ОПЕРАЦІЇ НАД ЗМІННИМИ ВКАЗІВНОГО ТИПУ. ______________________________________

Читайте также:
  1. A CLOSE SHAVE: где Громит и Шон спасают всех
  2. A formula - formulae (formulas), a crisis - crises, a criterion - criteria, an index - indices, a bacterium — bacteria, an axis — axes
  3. A global effort to keep food prices from soaring higher
  4. A LIST OF LITERATURE USED AND RECOMMENDED
  5. A radioactive disintegration. Kinds of radioactive radiation
  6. A REVIEW OF THE FOOD AND BEVERAGE MARKET IN KAZAKHSTAN
  7. A) Listen to the recording of Text Five and mark the stresses and tunes, b) Repeat the text in the intervals after the model.
  8. A) Listen to the recording of Text Four and mark the stresses and tunes, b) Repeat the text in the intervals after the model.
  9. A) Listen to the recording of Text One and mark the stresses and tunes, b) Repeat the text in the intervals after the model.
  10. A) Listen to the recording of Text Six and mark the stresses and tunes, b) Repeat the text in the intervals after the model.
  11. A) Listen to the recording of Text Two and mark the stresses and tunes, b) Repeat the text in the intervals after the model.
  12. A) Make a round-table talk on the state of film-making in this country. Be ready to make suggestions about the possible improvements in film-making.

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

Присвоєння вказівників.

Вказівнику можна присвоювати вміст іншого вказівника такого ж типу або нетипізованого вказівника, константу NIL (порожній вказівник), адресу об’єкта, визначену за допомогою функції addr. Наприклад, якщо ми оголосили такі вказівники:

Var

Pntr1,Pntr2:^Integer;

Pntr3:^Real;

Pntr:Pointer;

i:integer;

то присвоєння

Pntr1:=Nil;

Pntr1:=Pntr2;

Pntr2:=addr(i);

допустимі, а присвоєння

Pntr1:=Pntr3; - ні, оскільки ці змінні вказують на різні типи даних.

Оператор присвоєння записують так само, як і для інших типів:

S:= r;

де s – змінна вказівного типу,

r – може бути змінною того ж типу, функцією, тобто значенням якої є вказівник цього ж вказівного типу або порожній вказівник nil.

Нехай

q: ^integer;

r: ^real;

тоді присвоєння p: = q недопустиме, оскільки p вказує на змінну дійсного типу, q -цілого.

Розглянемо приклад. Нехай описані вказівні змінні x та y.

var x,y: ^integer:

і визначені відповідні їм динамічні об’єкти – змінні цілого типу.

New(x); new(y);

Присвоєння x^:= 2; y^:=5; схематично можна показати:

Якщо тепер виконати присвоєння x:= y,то одержимо випадок, показаний на схемі

Якщо виконати присвоєння x^:= y^, то отримаємо ситуацію:

Порівняння вказівників.

Вказівники можна порівнювати, використовуючи при цьому операції = (рів­ність) та <> (нерівність). Інші операції порівняння не застосовні до операндів по­силального типу. Результат порівняння вказівників, як і результат будь-якого іншого порівняння, належить до логічного типу даних, і тому операції порівнян­ня вказівників можна використовувати в булевих виразах.

Зауважимо, що порівнювати значення вказівників, а також присвоювати зна­чення одного вказівника іншому можна лише в тих випадках, коли:

ü принаймні один із вказівників є нетипізованим;

ü обидва вказівники посилаються на один і той самий базовий тип даних.

Розіменування вказівників.

Щоб отримати значення, на яке посилається вказівник, потрібно виконати операцію розіменування вказівника. Ця операція позначається символом « ^ », що записується після імені вказівника, її можна записувати як у правій, так і в лівій частині оператора присвоєння:

<ідентифікатор змінної>:= <ідентифікатор вказівника>^; < ідентифікатор вказівника > ^:= < вираз >;

Операцію розіменування можна застосовувати лише до вказівників, яким на­дано значення певної адреси динамічної пам'яті.

Суть її полягає в переході від вказівника до значення, на яке він вказує. Синтаксис цієї операції:

program prob;

uses crt;

var I,j:integer;

ptri:^integer;

Begin

i:=5;

ptri:=addr(i);

j:=ptri^;

writeln( ‘j=’,j);

repeat until keypressed;

End.

Розіменовані вказівники на структури індексуются (у випадку масивів) чи поділяються на поля (записи, об’єкти) звичайним способом.

Н а п р и к л а д:

Pta^[i] – доступ до і-го елементу масиву

Ptrec^.поле – доступ до поля динамічного запису

ObjPtr^.Метод – доступ до методу динамічного об’єкта.

Розглянемо дві змінні: змінну variable типу integer і покажчик ptr на дані типу integer. Нехай вказівнику ptr надано адресу змінної variable, тобто виконано операцію ptr:=@variable. Тоді зна­чення виразів variable і ptr^ завжди будуть однаковими. Якщо ж присвоєння ptr:=@variable замінити операцією ptr^:=variable, то змінні ptr^ та variable будуть різними, хоча, можливо, і матимуть протягом певного часу однакові значення. У прикладі наведені й інші варіанти використання операцій із вказівниками. Зазначимо, що результат розіменування нетипізованого покажчика має невизначений тип, і тому вираз ptr^, де ptr — нетипізований вказівник, не може входи­ти до складу інших виразів. Нарешті, спробуємо встановити, яке значення має ще не ініціалізований вказівник. У більшості випадків компілятор надає йому спеціальне значення, що позначається зарезервованим словом nil. Якщо значення певного вказівника ста­новить nil, то вважається, що вказівник не посилається на жоден елемент даних. Тому значення nil називають ще порожньою адресою. Результат розіменування вказівника, значення якого дорівнює nil, є непередбачуваним.
     

Особливості використання динамічних змінних порівняно зі статичними:

1) замість опису динамічних змінних описують вказівники – статичні змінні вказівного типу, які ставлять у відповідність динамічним змінним;

2) для створення динамічних змінних, використовують процедуру new, фактичним параметром якої задають відповідну вказівну змінну;

3) доступ до динамічних змінних відбувається за допомогою змінних з вказівником.


1 | 2 | 3 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)