Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Новые рефераты » Опис покажчиків

Реферат Опис покажчиків





ну частина адреси, за якою розташовується 4-байтний покажчик Р, в той час як SEG (P ^) - сегмент 6-байтного ділянки купи, в якому зберігається число 3.14 .

З іншого боку, за допомогою вбудованої функції PTR (SEG, OFS: WORD): POINTER можна створити значення покажчика, сумісний з покажчиками будь-якого типу. Таким чином, можлива така послідовність дій. Спочатку процедурою GETMEM з купи забираються кілька фрагментів відповідної довжини (нагадаю, що за одне звернення до процедури можна зарезервувати не більше 65521 байт динамічної пам'яті). Для рас розглянутого прикладу зручно резервувати фрагменти такої довжини щоб у них могли, наприклад, розміститися рядка прямокутної матриці, тобто br/>

* 10 = 2000 байт. br/>

Початок кожного фрагмента, тобто фактично початок розміщення в пам'яті кожного рядка, запам'ятовується в масиві PTRSTR, що складається з 100 вказівників. Тепер для доступу до будь-якого елементу рядка потрібно обчислити зміщення цього елемента від початку рядка і сформувати відповідний покажчик:


var, j: integer;: array [1 .. 100] of pointer;: ^ real; = 6; i: = 1 to 100 do (PtrStr [i], SizeOfReal * 200);

{Звернення до елементу матриці [i, j]}

pr: = ptr (seg (PtrStr [i] ^), ofs (PtrStr [i] ^) + (j-1) * SizeOfReal);

if pr ^> 1 then


Оскільки оператор обчислення адреси PR: = PTR ... буде, судячи з усього, використовуватися в програмі неодноразово, корисно ввести допоміжну функцію GETR, що повертає значення елемента матриці, і процедуру PUTR, яка встановлює нове значення елемента. Кожна з них, у свою чергу, звертається до функції ADDRR для обчислення адреси. Нижче наводиться програма, що створює в пам'яті матрицю з NxM випадкових чисел і обчислює їх середнє значення. br/>

program Primer1; = 6; {Довжина змінної типу REAL} = 100; {Кількість стовпців}

М = 200; {Кількість рядків}

var, j: integer;: array [1 .. N] of pointer;: real; = ^ real;

{} AddrR (i, j: word): RealPoint;

{За сегменту i і зміщення j видає адресу дійсної змінної}

begin: = ptr (seg (PtrStr [i] ^), ofs (PtrStr [i] ^) + (j-1) * SizeOfReal); {AddrR}

{} GetR (i, j: integer): real;

{Видає значення дійсної змінної по сегменту i

і зміщення j її адреси}

begin: = AddrR (i, j) ^; {GetR}

{} PutR (i, j: integer; x: real);

{поміщає в змінну, адреса якої має сегмент i

зміщення j, дійсне значення x}

begin (i, j) ^: = x; {PutR}

{} {Main} i: = 1 to N do (PtrStr [i], M * SizeOfReal); j: = 1 to M do PutR (i, j, Rand...


Назад | сторінка 5 з 6 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Аналіз діяльності туристичної агенції &Real-Travel&
  • Реферат на тему: Analysis of Control System and Synthesis of Real Compensator
  • Реферат на тему: Розробка програм по створенню бази даних приладів і додавання першого рядка ...
  • Реферат на тему: Аналіз ДІЯЛЬНОСТІ туристичної агенції "Real-Travel"
  • Реферат на тему: Шляхи вдосконалення PR-ДІЯЛЬНОСТІ туристичного підприємства "Real-trav ...