АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Адресная функция

Читайте также:
  1. I Функция
  2. А Адресная панель
  3. Аналитическая функция
  4. Архитектура, управляемая событиями. Типы данных Win32. Оконная процедура (функция). Оконный класс.
  5. Взаимосвязь с другими функциями организации
  6. Внимание как высшая психическая функция, по Л.С. Выготскому
  7. Внимание как функция умственного контроля, по П.Я. Гальперину
  8. Волновая функция
  9. Волновая функция многоэлектронной системы в одноэлектронном приближении
  10. Волновая функция системы
  11. Волновая функция электронов в кристалле

Векторная память поддерживается почти всеми языками высокого уровня и предназначена для хранения массивов различной размерности и различных размеров. Каждому массиву выделяется непрерывный участок памяти указанного размера. При этом элементы, например, двухмерного массива X размерностью nn 2 размещаются в ОП в следующей последовательности:

Х (0,0), Х (0,1), Х (0,2),... Х (0, n 2–1),..., Х (1,0), Х (1,1), Х (1,2),... Х (1, n 2–1),..., Х (n 1–1,0), Х (n 1–1,1), Х (n 1–1,2),..., Х (n 1–1, n 2–1).

Адресация элементов массива определяется некоторой адресной функцией, связывающей адрес и индексы элемента.

Пример адресной функции для массива Х:

K (i, j) = n 2* i + j;

где i = 0,1,2,...,(n 1–1); j = 0,1,2,...,(n 2–1); j – изменяется в первую очередь.

Адресная функция двухмерного массива A (n, m) будет выглядеть так:

N 1 = K (i, j) = m * i + j,

i =0,1,..., n –1; j =0,1,..., m –1.

Тогда справедливо следующее:

A (i, j) «B (K (i, j)) = B (N 1),

B – одномерный массив с размером N 1 = n * m.

Например, для двухмерного массива A (2,3) имеем:

(0,0) (0,1) (0,2) (1,0) (1,1) (1,2) – индексы массива А;
            – индексы массива В.

Проведем расчеты:

i = 0, j = 0 N 1 = 3*0+0 = 0 B (0)

i = 0, j = 1 N 1 = 3*0+1 = 1 B (1)

i = 0, j = 2 N 1 = 3*0+2 = 2 B (2)

i = 1, j = 0 N 1 = 3*1+0 = 3 B (3)

i = 1, j = 1 N 1 = 3*1+1 = 4 B (4)

i = 1, j = 2 N 1 = 3*1+2 = 5 B (5)

 

Аналогично получаем адресную функцию для трехмерного массива Х (n 1, n 2, n 3):

K (i, j, k) = n 3* n 2* i + n 2* j + k,

где i = 0,1,2,...,(n 1–1); j = 0,1,2,...,(n 2–1);); k = 0,1,2,...,(n 3–1); значение k – изменяется в первую очередь.

Для размещения такого массива потребуется участок ОП размером (n 1* n 2* n 3)* sizeof (type). Рассматривая такую область как одномерный массив Y (0,1,..., n 1* n 2* n 3), можно установить соответствие между элементом трехмерного массива X и элементом одномерного массива Y:

X (i, j, k) «Y (K (i, j, k)).

Необходимость введения адресных функций возникает лишь в случаях, когда требуется изменить способ отображения с учетом особенностей конкретной задачи.

Работа с динамической памятью

Указатели чаще всего используют при работе с динамической памятью, которую иногда называют «куча» (перевод английского слова heap). Это свободная память, в которой можно во время выполнения программы выделять место в соответствии с потребностями. Доступ к выделенным участкам динамической памяти производится только через указатели. Время жизни динамических объектов – от точки создания до конца программы или до явного освобождения памяти.

С другой стороны, некоторые задачи исключают использование структур данных фиксированного размера и требуют введения структур динамических, способных увеличивать или уменьшать свой размер уже в процессе работы программы. Основу таких структур составляют динамические переменные.

Динамическая переменная хранится в некоторой области ОП, не обозначенной именем, и обращение к ней производится через переменную-указатель.

Но вначале рассмотрим еще одну операцию языка Си, основное назначение которой – работа с участками оперативной памяти.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)