VarArrayLock, функцияСинтаксисfunction VarArrayLock(var V: Variant): Pointer; Описание
Функция VarArrayLock блокирует размерности массива Variant, чтобы их нельзя
было изменить, и возвращает указатель на простой массив с содержимым массива
Variant. Массив данных организован так, что самый левый индекс изменяется первым
(развертывание по строкам). Заметьте, что обычные массивы Паскаля хранятся в
порядке развертывания по столбцам, и первым изменяется самый правый индекс.
VarArrayLock не является настоящей функцией ОшибкиСоветы и приемы
Пример// Перестановка двух значений типа double. procedure DSwap(var A, B: Double); var Tmp: Double; begin Tmp := A; A := B; B := Tmp; end; // Транспонирование матрицы значений varDouble. Для максимальной // производительности блокируем массив Variant и обращаемся к данным // в чистом виде. procedure Transpose(var M: Variant); type TDoubleArray = array[0..MaxInt div SizeOf(Double)-1] of Double; PDoubleArray = ^TDoubleArray; var I, J: Integer; Data: PDoubleArray; Dim1: Integer; Low1, Low2: Integer; High1, High2: Integer; begin Assert(VarType(M) = varArray or varDouble); Data := VarArrayLock(M); try Low1 := VarArrayLowBound(M, 1); Low2 := VarArrayLowBound(M, 2); High1 := VarArrayHighBound(M, 1); High2 := VarArrayHighBound(M, 2); Dim1 := High1 - Low1 + 1; // Массив Data представляет собой одномерный вектор, но // его значения все равно организованы в виде матрицы. Переставляем // элементы матрицы M[J, I] и M[I, J] с помощью массива Data. for I := Low1 to High1 do for J := I to High2 do DSwap(Data[J-Low2 + (I-Low1)*Dim1], Data[I-Low2 + (J-Low1)*Dim1]); finally VarArrayUnlock(M); end; end; Смотрите такжеФункции VarArrayCreate, VarArrayDimCount, VarArrayHighBound, VarArrayLowBound, VarArrayOf, VarArrayRef, VarArrayUnlock, VarIsArray, VarType, процедура VarArrayRedim.Учебник по языку Pascal Лабораторные работы по программированию Справочник
|