68985

Вказівники. Вказівний тип

Лекция

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

У мові Паскаль для роботи з динамічними об’єктами передбачено спеціальний тип значень – вказівний. Це такий же простий тип, якими є цілий, дійсний, логічний. Однак для нього в мові не зарезервовано жодного стандартного ідентифікатора. Загальний вигляд опису вказівного типу такий...

Украинкский

2014-09-28

35.5 KB

5 чел.

Лекція № 14

Тема: Вказівники

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

  1.  Вказівний тип
  2.  Створення динамічних об’єктів

Вказівний тип

Умові Паскаль для роботи з динамічними об’єктами передбачено спеціальний тип значень – вказівний. Це такий же простий тип, якими є цілий, дійсний, логічний. Однак для нього в мові не зарезервовано жодного стандартного ідентифікатора. Загальний вигляд опису вказівного типу такий:

type

<Ім'я_вказівного_типу>=^<ім'я_типу>

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

Наведемо приклад опису змінних вказівного типу:

type

vect=array [1..10] of char;

mas=^vect;

var

p: ^real;

q:^integer;

m: mas;

За допомогою наведених вище описів уведено три змінні вказівного типу: p, q i m. Для однієї з них (т) тип заданий явно, для двох інших - неявно. Згідно з цими описами значення змінної р в програмі буде вказівкою на деякий динамічний об'єкт дійсного типу, значення q - на динамічний об'єкт цілого типу, а значення т - вказівкою на динамічний об'єкт, що є масивом з 10-ти літер. Читати наведені вище описи треба так: "Тип mas є вказівкою на ”vect, "Змінна р є вказівкою на дійсну змінну" тощо. Про те, що описуваний об'єкт є вказівного типу, свідчить стрілка ^ в описі цього типу. Значення кожної із змінних вказівного типу визначають місце в пам'яті відповідного динамічного об'єкта.

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

m:=nil;

Створення динамічних об’єктів

Для створення динамічного об'єкта, пов'язаного з деякою змінною вказівного типу, використовують стандартну процедуру new. Фактичним параметром цієї процедури може бути тільки змінна вказівного типу. У результаті виконання оператора процедури new(m) під час виконання програми буде введено новий динамічний об'єкт, тип якого зазначений в описі змінної вказівного типу, що є фактичним параметром процедури new. Крім цього, змінній вказівного типу (у нашому випадку т) буде присвоєна вказівка на цей уведений динамічний об'єкт. На машинному рівні механізм виконання оператора процедури new(p) полягає в тому, що в пам'яті комп'ютера відводиться місце для розміщення нового динамічного об'єкта, а відповідній змінній вказівного типу буде присвоєна адреса початку цього місця. У нашому випадку new(m) вводить масив десяти символів, а змінній т присвоюється значення, що є вказівкою на цей масив. Зазначимо, що введений об'єкт (у нашому випадку масив) не набуває

жодного значення, дія процедури new(m) щодо цього динамічного об'єкта відіграє ту ж роль, що й опис для статичного об'єкта. У мові Турбо Паскаль можна використовувати процедуру new у функціональній формі. Тоді параметр функції new (тепер цс функція) задає вказівний тип, а результатом буде вказівник (значення вказівної змінної) цього типу, що визначає створений унаслідок цього динамічний об'єкт. Наприклад, аналогом оператора процедури new(m) буде оператор

m:=new(mas);

Раніше зазначено, що під час розподілу пам'яті під локальні змінні відводиться спеціальний сегмент оперативної пам'яті (сегмент стека). Для динамічних об'єктів уводиться інша область пам'яті, що є окремо від стекового сегмента і називається купою (heap), або динамічною областю пам'яті.

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

Нехай у програмі описана деяка змінна q:

Var q: ^integer;

Тоді оператор процедури new(q);

приведе до створення деякої змінної цілого типу, на яку вказуватиме вказівник q. Якщо ж тепер виконати присвоєння q^:=12;

то введеній динамічній змінній буде присвоєне значення 12. Ще раз зазначимо, що динамічним змінним у програмі не відведені жодні імена, а доступ до них відбувається за допомогою змінних з вказівниками.

Наведемо ще приклади операцій з динамічними змінними. Нехай S- змінна цілого типу. Тоді, використовуючи опис змінної q і процедуру new, можна записати

S:=S-q^*4;S:=q^mod2;

Якщо В - деякий масив цілих чисел, то

B[q^-2]:=14;

Якщо ж є опис

type vkaz=^char;

var С: array [1..10] of vkaz;

то він уводить масив С вказівників, кожен елемент якого вказує на якусь змінну символьного типу. Тоді можна записати

С[5]^:='I'; C[S-2]^:='n'.


 

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

52276. Повторювально-узагальнюючий урок за темою: «Передня Азія» 40 KB
  Назвати річки що протікають через Межерічча. Назвати та показати місто яке називали Ворота Божі. Назвати військову державу що розташована у верхній течії р. Назвати столицю Ассирійської імперії яку називали містом крові.
52277. Уроки державної мови 5.42 MB
  Ось що радить доктор філологічних наук Світлана Єрмоленко. У мовній практиці часом використовують ці лексеми як взаємозамінні. Але взаємозамінність у термінологічних висловах – річ небажана, і зрештою в кожному конкретному звороті утворюється якесь одне термінологічне слово, а інші, якщо вони не мають додаткових значеннєвих відтінків, виходять із літературно-нормативного вжитку.
52278. Бабуся – берегиня нашого роду 117 KB
  Та запросили у гості сьогодні тих людей яких обєднує не вік а високе почесне звання бабуся Ми зібралися великою родиною щоб вітати й вшановувати найрідніших найближчих нам людей. Що в мене є бабуся. Учитель: Так кого ж ми називаємо таким теплим іменем бабуся Діти відповідають а вчитель їх підводить до висновку що це мати мами або...
52279. Жизненная сила музыки И.С. Баха 69 KB
  Баха Цели и задачи урока: Закрепить понятие полифония на примерах вокального инструментального и произведения изобразительного искусства; Определить особенности содержания музыки И. Баха; Формировать: представление о стилистических особенностях музыки И. Баха понятие Сюита навыки хорового пения. Баха иллюстрации по теме урока стихи и высказывания по теме урока нотный материал.
52280. Бактериологическое оружие и его поражающие факторы 50.5 KB
  11й класс Цели: Познакомить учащихся с видами поражающими факторами бактериологического оружия. Обучить способам защиты от бактериологического оружия. Учебные вопросы: История применения бактериологического оружия. Краткая характеристика бактериологического оружия и его боевых свойств.
52281. Злочини бактерій проти людства 68 KB
  Характеристика холери менінгококової хвороби дифтерії туберкульозу сифілісу. Стан захворюваності на туберкульоз в Україні. Обладнання: ПК; мультимедійний проектор; презентації: Хвороботворні бактерії: вчора і сьогодні Туберкульоз підступний вбивця Профілактика бактеріальних хвороб ; оцінювальні завдання; слайд із відповідями на завдання; виставка газетбюлетенів: Кишкові інфекції Туберкульоз підступний вбивця Імунітет на сторожі здоровя . Фтизіатри зясувати особливості збудника туберкульозу причини поширення...
52282. Випускний вечір 88 KB
  Веселинівської районної ради Миколаївської області Випускний вечір 2011 Звучать фанфари на сцену виходять ведучі Ведучий. Ведучий. Ведучий. На сьогоднішнє свято запрошуємо тих хто впродовж одинадцяти років вів винуватців сьогоднішніх урочистостей нелегкими стежками шкільних наук ті хто вчив читати і писати відкрив чудесні світи літератури та точних наук наші вчителі звучить музика виходять вчителі Ведучий.
52283. Осінній бал. Поетично – музичний вечір присвячений посвяті учнів 9 класу в старшокласники 54 KB
  Осінь нам дарує радість й спокій І чарівних квітів розмаїть Осінь це пора прекрасних років Коли в повну силу треба жить В. Осінь уже не щедра на квіти. Вишиває осінь на канві зеленій золоті квітки Квіти оживають і з дерев спадають жовті ягідки. Вишиває осінь на канві зеленій золоті квітки В.