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'.


 

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

24725. Предметная область психологии 71.5 KB
  занятие контрольнодиагностические задания Цели: теоретическое и практическое овладение знаниями знакомство с наукой психология связь психологии с другими науками Ключевые понятия: психология как наука предмет психологии задачи психологии. Методология и методы психологии: методология наука о методах. психологии харакны след принципы: В основе лежат постулаты диалектического материализма Принцип развития психика непрерывно изменяющ.
24726. Человек как предмет общей психологии 35.5 KB
  Предложите и обоснуйте проект проведения лекции по теме Человек как предмет общей психологии Тема: человек как предмет общей психологии лекция. Цель: человек как предмет общей психологии. Ключевые понятия: объект психологии; предмет психологии; модельное описание психического облика человека: лингвистическая картина психического облика человека описание состава человеческой души: Аристотель Платон Плотин; ингредиенты психического облика; психика. Основные тезисы и краткое их доказательство: Первым и важнейшим объектом психологии...
24727. ТЕМПЕРАМЕНТ 43.5 KB
  Адресат: студенты 1го курса психологического факультета Цели: знакомство студентов с понятием темперамент раскрытие этого понятия через его определение и свойства с помощью темперамента показать психологические личностные различия. Задачи: определение темперамента история представлений о темпераменте свойства темперамента. Ключевые понятия: темперт темпераментные свойства типы ВНД типы темпта.
24728. Личность 41 KB
  Задачи: определение подходов к пониманию личности понятия личность подходов выявляющих ядро личности закономерностей развития личности направления исследования личности. Ключевые понятия: личность; система смыслов черт планов отношений; индивид субъект деятельности индивидуальность; биологическое и социальное социализация личности. и краткое их доказательство: В психологии имеются разные подходы к пониманию личности: она м. Подходы выявляющие ядро личности можно систематизировать след.
24729. Тромбоцитопеническая пурпура 140 KB
  Заболевание начинается исподволь или остро с появления геморрагического синдрома: кровоизлияния в кожу или слизистые оболочки и кровотечения из них. Для ТП характерны кровотечения из слизистых оболочек. Наиболее часто у детей наблюдаются кровотечения из носа маточные кровотечения у девочек в пубертатном возрасте. Реже бывают желудочнокишечные и почечные кровотечения.
24730. Патология периода новорожденности 127 KB
  Слайд 2 Последствия перенесенной энцефалопатии в периоде новорожденности нарушения психики церебральные параличи эпилепсия другие заболевания головного мозга. Некоторые дети перенесшие внутричерепную травму остаются с нарушениями психики с церебральными параличами с эпилепсией и другими заболеваниями головного мозга. Механизм развития патологического процесса при внутричерепной травме новорожденных можно представит в виде следующей схемы: Слайд 4 Схема развития патологического процесса при повреждении нервной системы...
24731. ПРОБЛЕМЫ НЕОНАТОЛОГИИ 204 KB
  МЛАДЕНЧЕСКАЯ СМЕРТНОСТЬ И ПУТИ ЕЕ СНИЖЕНИЯ Основное назначение педиатрии и охраны здоровья детей и подростков состоит в том чтобы способствовать нормальному физическому и психическому развитию как можно большего числа родившихся детей. Достижения недостатки а также задачи будущей работы отражают показатели детской смертности то есть отношение числа детей умерших в течение первого года жизни к тысяче родившихся. смертность детей в возрасте до 1 года показатель социального благополучия страны. Показатель ее рассчитывается на 1000...
24732. ПЕРИОДЫ ДЕТСТВА 128.5 KB
  Внеутробный этап: период новорожденности от рождения до 28го дня жизни; ранний неонатальный от рождения до 7го дня жизни; поздний неонатальный с 8го до 28й дня жизни; период грудного возраста с 28го дня жизни до 12 мес; ранний детский возраст от 1 года до 3 лет; дошкольный возраст от 3 до 6 лет; 5 младший школьный возраст от 7 до 11 лет; старший школьный период подростковый пубертатный от 12 до 1718лет. В различные периоды развития отмечается неравномерное совершенствование отдельных органов и систем организма...
24733. ПИТАНИЕ ДЕТЕЙ ПЕРВОГО ГОДА ЖИЗНИ. ЕСТЕСТВЕННОЕ ВСКАРМЛИВАНИЕ 164 KB
  слайд 1 Условия для нормального вскармливания ребенка грудного возраста правильная организация вскармливания систематический контроль за вскармливанием культурный уровень матери материальные возможности матери Ошибки допущенные в самом начале исправляются с трудом или вообще неисправимы. Однако гладкая мускулатура у ребенка развита слабее и наблюдается определенная склонность к дистензии желудочнокишечного тракта. Слайд 4 Особенности кала ребенка находящегося на грудном вскармливании кал яичножелтого цвета не имеет...