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


 

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

41878. Создание сложных комплексных объектов в 3D MAX 1.88 MB
  Выберите в Меню создание формы линии на панели инструментов Object Type – сплайны. Для этого задайтесь замкнутыми сплайнлиниями выберите Strt New Shpes сплайны и Линия Нарисуйте несколько замкнутых линий. Вернитесь в раздел геометрия выберите раздел Compound Objects на закладку ландшафт Terrin В пункте Pick Opernd выберите Pick Opernd и Reference. Выберите 2 объемные фигуры сферу и цилиндр или другие.
41879. Сброс и подбор пароля Windows7 1.49 MB
  Сброс пароля Windows7 На многих компьютерах ноутбуках и других устройствах под управлением Windows 7 пользователи устанавливают пароли на вход.Сброс пароля Windows 7 при помощи командной строки Для реализации этого способа необходим доступ к командной строке с правами Администратора.Сначала нам необходимо создать установочный диск или флешку с Windows 7.Загружаемся с диска и запускаем установку:Нажимаем Далее:Щелкаем по ссылке Восстановление системы:Немного ждем пока происходит поиск установленных Windows выбираете вашу Windows 7 и...
41880. Создание документов с помощью функции слияния 202.6 KB
  Принцип слияния: при подготовке серийного документа используются файл с основным документом и файл источника данных. В основной документ вставляются поля подстановки или поля слияния в которые затем и помещаются переменные данные в результате чего образуется готовый документ. Во время слияния MS Word строит на основе этих файлов множество необходимых документов.
41882. Элементный анализ органических веществ 84.34 KB
  В сухую пробирку насыпают черный порошок оксида меди. Добавляют половину микролопатки глюкозы и тщательно перемешивают встряхивая пробирку. Пробирку закрывают пробкой с газоотводной трубкой при этом конец трубки должен упираться в вату. Нижний конец трубки опускают в пробирку с 56 каплями баритовой воды.
41883. СТАТИЧЕСКАЯ И ДИНАМИЧЕСКАЯ НАСТРОЙКА СТАНКА 3.23 MB
  Для выполнения любой операции механической обработки заготовок необходимо произвести настройку станка. Под настройкой понимают процесс установки и закрепления режущего инструмента, приспособлений и других устройств (упоров, кулачков и т.д.) для обеспечения необходимого взаимного положения обрабатываемой заготовки и инструмента, при котором выдерживается заданная точность обработки
41884. Исследование метеорологических условий (микроклимата) в производственном помещении 187.53 KB
  Измерить температуру влажность скорость движения воздуха создаваемую вентилятором и атмосферное давление воздуха в помещении лаборатории результаты измерений занести в таблицу 1. Определить расчетным путем относительную влажность воздуха по результатам измерений параметров микроклимата для аспирационного психрометра используя формулы 2 и 3 методических указаний. Для измерения температуры воздуха в помещении наиболее целесообразно использовать сухой термометр аспирационного психрометра. Относительная влажность воздуха Аспирационный...
41885. Информатика и системы вычисления. Сборник лабораторных работ. 108.14 KB
  Список с двумя указателями Номер абонемента Название книги дата выдачи дата возврата дата фактического возврата. Вставить новый узел в список после последнего узла с таким же номером абонентадата фактического возврата еще не заполнена. Список с головным элементом Номер мед. полисом в новый список.
41886. ВЛИЯНИЕ ТЕМПЕРАТУРЫ НА РАСТВОРИМОСТЬ БЕЛКОВ (НА ПРИМЕРЕ БЕЛКОВ МЯСА, РЫБЫ, МУКИ) 135.38 KB
  При жарке мяса температура в центре куска может быть 60 С полусырой бифштекс или ростбиф или 80 85 С полностью прожаренное мясо а при варке 94 96 С. При нагревании мяса и рыбы до более высокой температуры уменьшается растворимость мышечных белков уплотняются белковые студни снижается влагоудерживающая способность мяса и рыбы уменьшается сочность изделий и повышается их жесткость. Поэтому при тепловой обработке мяса и рыбы следует применять мягкие режимы тепловой кулинарной обработки стремиться сокращать продолжительность хранения...