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


 

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

44372. Анализ характеристик микромеханического гироскопа в режиме автоколебания 7.18 MB
  Перечень принятых обозначений и сокращений АД – амплитудный детектор АМ – амплитудная модуляция АФХ – амплитуднофазовая характеристика АХ – амплитудная характеристика АЦП – аналогоцифровой преобразователь ВМ – временная модуляция ДП – датчик положения ДПИ – датчик первичной информации ДС – датчик силы ИМ – инерционная масса К – компаратор Кл ключ КП – компенсирующий преобразователь МК микроконтроллер ММГ –...
44373. Аналіз діяльності ресторанного підприємства ТОВ Фантастік Інтернейшнл на прикладі Ресторану «Гімалаї» 143.67 KB
  Під час проходження практики я дізналася про різноманітні аспекти ресторанного господарства. Я отримала повну інформацію про правила здійснення торговельної діяльності, особливості національної кухні Індії, обслуговування населення в індійському стилі, порядок розрахунку зі споживачами. Загалом можу сказати, що робота в ресторані «Гімалаї» відображає сучасний рівень обслуговуваня населення в ресторанах України.
44374. Проектирование и разработка сайта интернет-представительства ООО «ХХХ» 1.98 MB
  Компании разрабатывают новые средства контакта со своими потенциальными потребителями и стараются размещать свои рекламные сообщения там где их аудитория проводит большую часть своего времени: на отраслевых развлекательных и новостных порталах в блогах и социальных сетях. Dremwever программный продукт от компании dobe. Кроме того разработчики компании dobe обновили движок WebKit улучшив поддержку видео и аудио На сегодняшний момент последней версией является Dremwever CS5. MySQL является собственностью компании Orcle Corportion...
44375. Особенности кредитной политики Сбербанка России по обслуживанию физических лиц 1.07 MB
  В связи с этим тщательный отбор заемщиков анализ условий выдачи кредита постоянный контроль за финансовым состоянием заемщика за способностью погасить кредит являются одной из основополагающих составляющих финансового благополучия банка. Первая часть работы посвящена теоретическим аспектам кредитования физических лиц в коммерческих банках а именно функциям роли сущности и видам кредита. В этой части дана общая характеристика экономической деятельности Сберегательного банка как старейшего и неоднократно подтвердившего репутацию самого...
44376. Обществознание. Процессы общественного строя 309.15 KB
  Природа – естественная среда обитания общества во всем бесконечном разнообразии своих проявлений, обладающая своими, не зависящими от воли и желаний человека, законами. Общество – обособившаяся от природы, но тесно связанная с ней часть материального мира, которая состоит из индивидуумов, обладающих волей и сознанием, и включает в себя способы взаимодействия людей и формы их объединения.
44377. ТЕОРІЯ АРХІТЕКТУРИ. Л.М. Бармашина 9.17 MB
  Викладено основні теоретичні аспекти архітектурної композиції. Розглянуто наступні групи питань: конструктивні системи несучих та інших конструкцій, зокрема стійково-балкова, склепінна, консольна та інші тектонічні системи, а також особливості тектоніки різних просторових конструкцій; теорія кольору в архітектурній композиції, просторові та психологічні властивості кольорів, колірна композиція, кольорове вирішення міської забудови, композиційні властивості архітектурного простору.
44378. Совершенствование механизма возмещения НДС по экспортным операциям на предприятии ООО «Яснополянская фабрика тары и упаковки» 664 KB
  На практике почти невозможно выделить добавленную стоимость в общей стоимости продукции (работ, услуг), поэтому для упрощения расчетов за объект обложения налогом на добавленную стоимость принимается не добавленная стоимость, а весь оборот по реализации, включая стоимость списанных на издержки производства и обращения материальных затрат (без учета уплаченного за них НДС)
44380. Многоформная (полиморфная) экссудативная эритема 103 KB
  Знать этиологию, патогенез МЭЭ. Уметь выявить причины возникновения заболевания. Уметь различать различные формы МЭЭ. Ознакомиться с клиникой МЭЭ. Усвоить принципы лечения и методы профилактики МЭЭ. Ознакомиться к этиопатогенезом розового лишая (РЛ) Жибера. Уметь различить клинические особенности РЛ. Уметь диагностировать РЛ