русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


ОПЕРАЦІЇ РОЗІМЕНУВАННЯ.


Дата додавання: 2013-12-23; переглядів: 2269.


Основною операцією при роботі із зсилочними змінними є операція розіменування. Суть її полягає в переході від зсилочної змінної до

значення, на яке вона вказує. Ця операція позначається вказуванням символу'вказівника (^) слідом за вказівниковою змінною. Результатом операції є значення об'єкту, на який вказувала зсилочна змінна. Є дві зсилочні змінні i та j, що вказують на об'єкти цілого типу, значення яких дорівнюють 2 і 4. Для того, щоб одержати копію змісту і^ в змінну j^ необхідно виконати операцію:

j^:=i^;

Потрібно писати саме таким чином тому, що j:=і; приведе до копіювання

адреси значення, на який вказує і в зсилочну змінну j.

В цьому випадку ми одержимо дві зсилки на одне і те саме значення, а

значення, на яке раніше вказувала змінна j буде втрачено.

Зсилочні змінні і вказівники сумісні між собою по типу, тому не буде

помилки в слідуючому записі:

 

DimPtr:=RecPtr;

Але після розіменування контроль типів стає суворим, і тому наступний оператор:

DimPtr^: =RecPtr^; дасть помилку.

Тут мова йде не про значення цілком сумісних адрес, а про різнотипні значення за цими адресами.

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

IF DimPtr =XXXPtr then …

IF DimPtr <>XXXPtr then …

Порівняння зсилок не завжди працює коректно. Якщо дві зсилки вказують на одну і ту ж адресу в пам'яті, але ця адреса записана в них різними значеннями, то вони вважаються різними.

Процедури New і GetMem завжди повертають зсилки, приведені до такого вигляду, що зміщення адреси має значення від 0 до 15 ($F), тому вони порівнюються корректно.

А спеціальні функції Addr і Ptr цього не роблять, і порівнювати їх результати з чимось іншим треба з великою обережністю. Розіменовані зсилки на структури індексуються звичайним чином. Для визначених вище зсилок це буде виглядати наступним чином:

 

DimPtr^[i] {доступ до елементів і-го динамічного масиву}

RecPtr^.поле ; {доступ до поля динамічного масиву}

 

Після об'яви в програмі зсилки або вказівника, його значення не визначено і містить випадкову адресу.

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

зсилці коректне значення адреси.


<== попередня лекція | наступна лекція ==>
ТИП POINTER. | Pascal – об’єктно-орієнтована мова.


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн