Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
L10 показники, варианти заданий.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
96.77 Кб
Скачать

Показівники Тема: Показівники.

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

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

Характеризуються:

  1. Ці змінні явно не описуються, до них неможливо звернутись за допомогою ідентифікатора.

  2. Пам'ять для цих змінних не виділяється під час формування коду програми. Вона виділяється у спеціальній області оперативної пам'яті - heap-області (динамічній пам'яті) - тільки під час виконання програми (звідки і назва - динамічні змінні).

  3. Доступ до таких змінних виконується за допомогою показівників (чи посилань), які стають активними після визначення динамічного об'єкту та містять адресу у вигляді <сегмент>:<зміщення>

Показівники можуть містити будь-яку адресу: статичних даних, фрагменту коду програми, стеку і т.і.).

Тип показівник

Type <ідентифікатор>=^<базовий тип>;

<базовий тип> - визначає тип елементів, на які буде вказувати показівник

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

Опис базового типу не обов'язково повинен передувати опису показівника, але повинен міститись у тому ж розділі описування типів.

Звернутись до динамічних змінних можна тільки через показівник (а не через ідентифікатор):

<показівник>^

Вбудовані засоби

  • Існує зарезервоване константне значення, пов'язане з 'пустим посиланням', яке має ідентифікатор:

NIL ~ <#0>:<#0>

Цей показівник сумісний з будь-яким іншим показівником (будь-якого базового типу), тобто змінній будь-якого типу показівник може бути надане значення NIL.

  • Паскаль має вбудований тип показівника pointer

Це нетипізований показівник (тобто, не пов'язаний ні з жодним базовим типом і внаслідок цього сумісний з будь-яким типом показівника). Змінній типу pointer може бути надане значення змінної будь-якого типу показівника.

Але звернення до значення такої змінної (i^) може викликати помилку. Використовується для описування формальних параметрів типу показівник у процедурах та функціях.

  • Константа типу показівник може містити тільки значення NIL

Надання значення змінній-показівнику

  • Надання показівнику значення іншого показівника.

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

NEW(var p:pointer);

- створює нову динамічну змінну та встановлює на неї показівник.

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

Посилання на створену у такий спосіб змінну - через відповідний показівник. Якщо при виділенні пам'яті для змінної не вистачило місця - виникає помилка.

  • За допомогою безпосереднього надання показівнику припустимого значення адреси:

  1. Використання оператора @

@ - унарний оператор, що повертає адресу статичної змінної, процедури чи функції, сумісну з типом NIL (тобто з любим типом показівника):

  1. використання для змінної - повертає адресу цієї змінної у вигляді <сегмент>:<зміщення>

@<ідентифікатор змінної> <показівник>

  1. використання для процедури дозволяє отримати точку входу - адресу, з якої починається її виконання. Використовується для надання керування відповідній процедурі чи функції

@<ідентифікатор процедури, функції> <показівник на точку входу>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]