Команды, осуществляющие доступ к элементам массива формируются
при компиляции. Эти команды вычисляют адреса элементов массива. Для
одномерного массива функция доступа к адресу элемента k следующая:
Адрес(Массив[k])=Адрес(Массив[1]+(k-1))*(размер элемента)=
Адрес(Массив[1]) – (размер элемента) + (k*размер элемента)
Дескриптор одномерного массива
:
Имя
тип
элемента
тип индекса
начальный индекс
конечный индекс
адрес 1-ого элемента
Пусть имеется массив А типа integer длиной в 10
элементов,
следует
определить адрес 5-го элемента. Так как размер элемента массива 4 байта, то
Адрес(А[5])=0+4*4 байта =16-й байт.
Для двумерного массива с длиной строки n функция доступа к элементу
А[i,j] выглядит следующим образом:
Адрес(A(i,j)) = Адрес(A[1,1])+(((число строк над i-ой)*(размер строки) +
(число элементов слева от j-ого столбца))*(размер
элемента))=
Адрес (А[1,1])+(((i-1)*n)+(j-1))*(размер элемента)
Однако, в памяти двумерные массивы располагаются не в виде матрицы,
а в виде вектора.
При этом, вектор может
формироваться либо из строк
исходной матрицы (языки С, Pasсal, Бэйсик), либо из столбцов (язык
ФОРТРАН). Поэтому результат вычисления адреса элемента по приведенной
формуле даст различные значения
элемента в зависимости от того, как
реализовано хранение в памяти элементов двумерного массива для того или
иного ЯП.
Пример 4.
Определить адрес элемента А[3,2] для двумерного массива А[1..3,1..3]
типа integer
3 1 8
2 0 6
3 5 7 .
Адрес(А[3,2])=Адрес(А[1,1]+(((2*3)+(2-1))*4))=28.
Однако в ячейке с адресом 28 для языка с
расположением элементов в
памяти по строкам будет храниться значение 5, а
для реализации языка
FORTPAN – значение 6.
Do'stlaringiz bilan baham: