Доступ до об’єктів за адресою пам'яті здійснюється через спеціальні величини. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Доступ до об’єктів за адресою пам'яті здійснюється через спеціальні величини.



Вказівник – це такий же складений тип даних, як масиви, рядки; але він не є сукупністю елементів деякого базового типу.

Значеннями вказівників є чотирибайтні числа, проте це не є числа типу longint. Адреса являє собою комбінацію із 2-х 2-байтних цілих чисел. Одне із цих чисел є адресою початку сегменту в пам'яті, друге число – зміщення відповідної комірки пам'яті від початку сегменту.

Тема: Адресація пам'яті.

Початково оперативна пам'ять ЕОМ вимірювалася десятками Кбайт, тому всі програми, які виконувалися були обмежені за розміром.

З середини 80-х теоретично обґрунтовано і практично реалізовано використання 1 Мб пам'яті, при цьому постала проблема неможливості подальшого розширення її.

Через пару років використовували, крім основної пам'яті (1 Мб) – додаткову та розширену пам'ять, проте базова пам'ять залишається в межах 1 Мб і саме в ній починають виконуватися більшість програмних робіт.

Всі комірки пронумеровані від нуля до деякого кінцевого значення, що в 16-вій системі координат .

Звичайно при програмуванні не зручно користуватися адресами, що визначаються числом, розміром 2,5 байта.

Звуження до 2 байт дало б пам'ять 65536, а розширення до 3-х дало б пам'ять більшу ніж можна було б зробити на той час (більше ніж 4 мільярди – 4 Гб). Тому для адресації 1 Мб пам'яті вирішили умовно розділити її на окремі сегменти, причому сегменти могли перекривати один одного і розмір міг бути різним, але не більше 65536, це зроблено тому, що в межах сегменту можна користуватися для адреси 2-хбайтними числами.

Сегменти в пам'яті виділяються не в довільному місці, а лиш з байта, номер якого кратний 16.

Тепер для збереження адреси початку сегменту нема потреби використовувати п’ять 16-вих цифр, а лише чотири, а останній 0 завжди зберігається в пам'яті. Таким чином, для збереження повної адреси байта у пам'яті, використовується 2 2-хбайтних числа: адреса сегменту із 4-х цифр та зміщення байту в межах сегменту. Повна адреса обчислюється як сума

XXXX0 адреса

+XXXX зміщення

ZZZZZ повна адреса.

Наприклад Пам'ять – вулиця з деякою кількістю рядків 0 – 9999. замість того, щоб користуватися 4-значними числами, квартири умовно розміщуються в будинках по 100 квартир з нумерацією від 0 до 99. повний номер квартири визначається за формулою .

1234=12*100+34.

Квартира з номером 34 у 13 будинку з номером 12.

Тема: Оголошення та операції над вказівними величинами.

Вказівники оголошуються при допомозі спеціальної операції ^. Ця операція застосовується над деяким базовим типом, при цьому такі вказівники можуть зберігати адреси величин саме цього базового типу.

Хоча всі вказівники - це адреси, проте вказівники на різні базові типи є несумісними.

Наприклад.

TYPE

Pint=^INTEGER;

Pchar=^CHAR;

Pstring=^STRING;

PPint=^Pint;

PPPint=^PPint;

Тут оголошено 5 типів вказівників:

Pint – вказівник цілих чисел; Pchar – вказівник на символи; Pstring – вказівник на рядки; PPint – вказівник на вказівник на цілі; PPPint – вказівник на вказівник на вказівник на цілі.

Хоча всі оголошені типи є вказівниками, проте всі вони не сумісні між собою.

В Pascal є стандартний вказівний тип, який сумісний з будь-яким із вказівників. Тип – pointer.

Змінні у програмі можуть оголошуватися або через раніше названі вказівні типи, або явним чином.

Наприклад.

VAR

Pi1:Pint;

Pi2:^integer;

PPi1:PPint;

PPi2:^Pint;

PPPi1:PPPint;

PPPi2:^PPint;

Кожна з 3-х пар змінних є величинами еквівалентних вказівних типів. Перша змінна в кожній парі оглушена через ідентифікатор вказівного типу, друга – явним чином, через операцію ^. Між змінними кожної пари можна виконувати операції присвоєння.

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

Для того, щоб отримати адресу деякої змінної базового типу, використовується унарна операція взяття адреси (@).

VAR0000000

i1,i2:integer;

BEGIN

Pi1:=@i1;

PPi1:@Pi1;

PPi2:=@@i1

END;

Змінній Рі1 присвоєна адреса і1; змінній РРі1 присвоєна адреса адреси і1; змінній РРі2 присвоєно теж саме значення, але двократним використанням @.

Якщо потрібно отримати значення деякої величини, адреса якої відома, використовується інша операція – це унарна posfx-на операція і позначається ^.

Ці унарні операції виконуються в напрямі від ідентифікатора змінної. Операція @ виконується з права на ліво, а ^ - з ліва на право.

Для того, щоб застосування операції розіменування вказівника було коректним. Цей вказівник повинен бути попередньо зв’язаний зі змінною оператором @.



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 243; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.214.32 (0.007 с.)