68986

Операції над змінними вказівного типу

Лекция

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

Оператор присвоєння записують так само як і для інших типів: S:=r; де 5 змінна вказівного типу r може бути змінною цього ж вказівного типу функцією тобто значенням якої є вказівник цього ж вказівного типу або порожній вказівник nil. Для введених нами раніше змінних вказівного типу...

Украинкский

2014-09-28

52 KB

0 чел.

Лекція № 15

Тема: Операції над змінними вказівного типу

План заняття:

  1.  Операції над змінними вказівного типу
  2.  Особливості роботи з динамічними змінними

Операції над змінними вказівного типу

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

S:=r;

де 5 - змінна вказівного типу, r може бути змінною цього ж вказівного типу, функцією, тобто значенням якої є вказівник цього ж вказівного типу або порожній вказівник nil. Для введених нами раніше змінних вказівного типу р і q оператор

p:=q;

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

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

                  k

                  j

Рис.1. Два динамічні об'єкти.

На рис. 1. k та j - вказівні змінні, що вказують на певні об'єкти однакового типу. Після виконання оператора

k:=j;

виникне ситуація, відображена на рис.2 і об'єкт * стане недоступним, буде втрачений. На його місці можна розмістити інший об'єкт після додаткової операції.

Рис. 2 Результат перетворення вказівника.

Якщо ж виконати оператор k^:=j^, то виникне ситуація, відображена на рис.3 

Рис. 3 Результат переприсвоєнь динамічного об'єкта.

Після виконання k:=nil матимемо випадок, показаний на рис. 4.

Рис. 4. Результат занулення вказівника.

Розглянемо ще приклад з числовими об'єктами. Нехай описані вказівні змінні m та l:

var m,l: ^integer;

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

new(m);

new(l);

Присвоєння m^:=8; l^:=19 приводить до ситуації, показаної на рис.5.

Рис.5. Ініціалізація змінних з вказівниками.

Якщо тепер виконати присвоєння m:=l, то одержимо випадок, відображений на рис. 6.

Рис.6. Результат переприсвоєння вказівної змінної.

А якщо виконати присвоєння m^:=i^, то це приведе до ситуації з рис. 7.

Рис. 7. Результат переприсвоєння змінної з вказівником.

Особливості роботи з динамічними змінними

Під час роботи з динамічними об'єктами треба дотримуватись такого правила: вивільняти області пам'яті, виділені під динамічні змінні, якщо їх згодом не використовують. Інакше використання динамічних змінних призводить до швидкого "засмічення" динамічної пам'яті та її переповнення.

Ще одна особливість пов'язана зі стековим принципом розміщення статичних змінних, якими можуть бути вказівні змінні. Розглянемо такий приклад:

program Noreference;

type anketa=record

........

end;

aan=^anketa;

procedure GetAnketa;

var an:aan;

begin

an:=New(aan);

end;

begin

writeln(MemAvail);

GetAnketa;

writeln(MemAvail);

end.

Тут після виходу з процедури GetAnketa втрачено доступ до змінної an вказівного типу, а отже, і до динамічного об'єкта, на який вона вказує. Водночас об'єкт типу anketa залишається в динамічній пам'яті, його місце не вивільняється, що підтверджує результат виведення розміру вільної динамічної пам'яті перед і після виконання процедури. В описаному прикладі маємо втрату вказівки на динамічний об'єкт. Щоб уникнути таких випадків, треба під час виходу з блоку (процедури), в якому описані локальні змінні, що є вказівниками на відповідні динамічні об'єкти, або знищувати ці об'єкти, якщо вони надалі непотрібні, за допомогою процедури Dispose, або зберегти вказівники на них, присвоївши їх, наприклад, глобальним змінним.

Може виникнути протилежна ситуація, коли деяка область пам'яті вивільнена, а в програмі залишилася вказівка на неї. Розглянемо такий приклад:

var

q: ^rеаІ;

procedure p1;

var r: real;

begin

r:=10.5;

q:=@r;

writeln(q^);

end;

procedure p2;

var s: real;

begin s:=20.5;

writeln(q^)

end;

begin

p1;

p2

end.

У цьому прикладі використана унарна (що виконується з одним операндом) операція @ - обчислення адреси змінної r (взяття вказівника), що визначена в Турбо Паскалі. Присвоєння цієї адреси вказівній змінній q надає їй значення вказівника на змінну r. Під час виконання програми будуть послідовно виведені значення 10.5 і 20.5, хоча виводиться одна й та ж область пам'яті - та, на яку вказує вказівник q. Причина полягає в тому, що у разі виходу з процедури Р1 локальна змінна r перестає існувати, а вказівник на цю область залишається, оскільки q - глобальна змінна. В процедурі Р2 вводиться змінна s, яка згідно зі стековим принципом розподілу пам'яті розміщується на місці r.


*

**

**

*

**

**

**

8

19

19

8

19

19


 

А также другие работы, которые могут Вас заинтересовать

21268. Захист населення і територій від надзвичайних ситуацій 302 KB
  Актуальність проблеми забезпечення природнотехногенної безпеки населення і територій зумовлена тенденціями зростання втрат людей і шкоди територіям що спричиняються небезпечними природними явищами промисловими аваріями і катастрофами. Захист населення і територій від надзвичайних ситуацій техногенного та природного характеру це система організаційних технічних медикобіологічних фінансовоекономічних та інших заходів для запобігання та реагування на надзвичайні ситуації техногенного та природного характеру і ліквідації їх наслідків що...
21269. Сложные зубчатые механизмы. Кинематическое исследование зубчатых и планетарных механизмов 180.5 KB
  ложными зубчатыми механизмами называются механизмы с зубчатыми передачами с числом зубчатых колес больше двух. Это могут быть механизмы с оригинальными структурными схемами или механизмы, образованные последовательным...
21270. ЛІКВІДАЦІЯ НАСЛІДКІВ НАДЗВИЧАЙНИХ СИТУАЦІЙ 146 KB
  РІНР і в мирний і у воєнний час проводяться: для порятунку людей надання першої медичної допомоги постраждалим і ураженим та евакуації їх у лікувальні установи; локалізації аварій і усунення ушкоджень які заважають проведенню рятувальних робіт; локалізації аварій які загрожують життю людей на АЕС хімічно небезпечних обєктах енергетичних і комунальних мережах нафтоі газопроводах та інших обєктах і мережах; забезпечення життєдіяльності міст і обєктів господарювання; створення необхідних умов проведення відбудовних робіт. До...
21271. Організація цивільної оборони в сучасних умовах 259.5 KB
  2005 ВД Інжек 2005 Вступ Значна кількість великих катастроф що відбувалися на території України за останній час серед яких особливе місто займає Чорнобильська змістили пріоритети у призначенні Цивільної оборони від захисту населення в умовах воєнного часу на захист населення від наслідків надзвичайних ситуацій техногенного і природного характеру від галузевого відомчого формування і функціонування на функціональні із за діянням усіх рівнів виконавчої влади принципи формування і реагування на надзвичайні ситуації. Про захист...
21272. Надзвичайні ситуації мирного часу. Основи класифiкаціï надзвичайних ситуацій 244.5 KB
  Засоби масовоï інформаціï майже щодня повідомляють про надзвичайні ситуаціï що відбуваються у світі: лісові пожежі повені землетруси цунамі обвали зсуви селеві потоки виверження вулканів урагани смерчі снігові й пилові бурі та інші стихійні лиха аваріï і катастрофи на підприємствах і транспорті що супроводжуються загибеллю людей руйнуванням населенних пунктів і обєктів господарювання забрудненням і зараженням довкілля. Щорічно в нашій краïні виникають надзвичайні ситуаціï далі НС природного та техногенного характеру що...
21273. НАДЗВИЧАЙНІ СИТУАЦІЇ ВОЄННОГО ЧАСУ 197 KB
  Непряму поразку люди і тварини можуть отримати від вторинних осередків ураження уламки зруйнованих будівель або уламків скла каміння та інших предметів що летять із великою швидкістю. Таке ураження людей можливе при надмірному тиску 3 кПа і більше. Осередок ядерного ураження в залежності від тиску у фронті ударної повітряної хвилі умовно поділяється на 4 зони зруйнування: повні сильні середні і слабкі.