|
||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
ОПЕРАЦІЇ НАД ЗМІННИМИ ВКАЗІВНОГО ТИПУ. ______________________________________Над змінними вказівного типу визначені лише три операції, які приводять до значень того ж типу. З ними виконуються лише операції присвоєння, порівняння і розіменування. Присвоєння вказівників. Вказівнику можна присвоювати вміст іншого вказівника такого ж типу або нетипізованого вказівника, константу 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^.Метод – доступ до методу динамічного об’єкта.
Особливості використання динамічних змінних порівняно зі статичними: 1) замість опису динамічних змінних описують вказівники – статичні змінні вказівного типу, які ставлять у відповідність динамічним змінним; 2) для створення динамічних змінних, використовують процедуру new, фактичним параметром якої задають відповідну вказівну змінну; 3) доступ до динамічних змінних відбувається за допомогою змінних з вказівником. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |