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


 

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

43623. Информатика. Информация. Устройство ЭВМ 1.08 MB
  Информатика – современная научная база информационной сферы деятельности людей. Не существует однозначного понятия информатики – как науки. Рассмотрим следующие: Информатика – это наука, изучающая все аспекты получения, хранения, преобразования, передачи и использования информации.
43624. Опыт осуществляемый первичной профилактикой наркомании в гимназии РГСУ 60.45 KB
  Программа наркомании несовершеннолетних в Российской Федерации. Социальная профилактики наркомании среди подростков. Методы работы социального педагога по профилактике наркомании среди несовершеннолетних Глава 2. Опыт осуществляемый первичной профилактикой наркомании в гимназии РГСУ.
43625. Формирование диалогической речи детей дошкольного возраста с задержкой психического развития по картинке 65.27 KB
  Первое условие– потребность детей высказываться; второе – о чём нужно сказать т. и обобщенные в монографии“Обучение детей с задержкой психического развития†1981 констатируют у детей с ЗПР неустойчивость внимания недостаточность развития фонематического слуха зрительного и тактильного восприятия оптикопространственного синтеза моторной и сенсорной стороны речи долговременной и кратковременной памяти зрительномоторной координации автоматизации движений и действий. Общение необходимо для психического развития детей...
43626. Влияние применения ближнего света фар в дневное время суток на безопасность дорожного движения 1.99 MB
  В разделе «Введение» изучается значение станций технического обслуживания, необходимость их планирования, приводится описание станций технического обслуживания, видов СТО и производимых на них работах и услугах. Раздел «Технологический расчет»: представляет собой расчет производственной программы, годового объема работ, количества постов, численности рабочих и площадей помещений производственного корпуса.
43627. Анализ и оптимизация САР частоты вращения вала двигателя постоянного тока 2.54 MB
  Даля кафедра автоматизации и компьютерноинтегрированных технологий Курсовой проект по дисциплине Теория автоматического управления на тему: анализ и оптимизация САР частоты вращения вала двигателя постоянного тока В №13.2 Описание принципа действия САР 1.3 Определение передаточных функций элементов САР 1.4 Построение модели структурной схемы САР 1.
43628. УПРАВЛЕНИЕ ПЕРСОНАЛОМ Т.В. Зайцева, А.Т. Зуб 2.12 MB
  В учебнике рассматриваются важнейшие вопросы теории и практики управления персоналом организации: история становления данной науки; принципы, методы и подходы к построению системы управления персоналом в организации; основные процессы. Проанализированы различные аспекты основных направлений деятельности в рамках управления персоналом: планирование потребности в персонале и найм, оценка результативности труда, мотивация и оплата труда персонала...
43629. Организация проведения ТО и ТР автомобилей УАЗ -31512 в условиях ОАО Ростелеком г. Ухта 1.04 MB
  Транспорт важнейший элемент инфраструктуры, под который понимают отрасли народного хозяйства, создающие общие его функционирования. Транспорт оказывает активное влияние на процесс расширенного воспроизводства, величину запасов, сырья, топлива и промышленной продукции, производственную мощность складов
43630. НАБОР КОРПУСА СУДНА 3.04 MB
  Определить плавучесть остойчивость непотопляемость можно вычислив гидростатические и гидродинамические силы и моменты действующие на смоченную поверхность судна в различных условиях эксплуатации. Значение направление и точки приложения этих сил зависят от формы корпуса судна которая может быть описана графически при помощи теоретического чертежа. Теоретический чертеж изображает поверхность корпуса металлического судна без наружной обшивки. Проекции корпуса судна на эти плоскости соответственно носят названия: Бок Полуширота и...
43631. АУДИТ УЧЕТА ТРУДА И ЗАРАБОТНОЙ ПЛАТЫ В ОТРАСЛИ ЖИВОТНОВОДСТВА В СПК «БОЛЬШЕУТИНСКИЙ» 290.97 KB
  Целью дипломной работы является исследование организации бухгалтерского учета оплаты труда, анализ учета труда и заработной платы работников животноводства на примере СПК «Большеутинский». В соответствии с поставленной целью нами были сформулированы следующие задачи: