Читайте также: |
|
Як було відмічено вище, значенням варіантної змінної не може бути масив, описаний за звичайними правилами. Проте Delphi пропонує спеціальний варіантний масив, який можна створити за допомогою функції VarАrrayСreate, описаній в модулі Variants:
Function VarArrayCreate(const Bounds: array of Integer;
VarType: TVarType): Variant;
Параметр Bounds є масивом цілочисельних значень, кожна пара яких визначає межі зміни індексів. Кількість вимірів масиву, відповідно, визначається кількістю пар значень в цьому масиві. Замість масиву, заданого змінною, можна використовувати конструкцію наступного вигляду:
[<А1, В1>, <А2, В2>,..., <Аn, Вn>]
Другим параметром задається тип елементів масиву. При цьому можуть використовуватися будь-які константи, наведені в таблиці. 1, за винятком varstring, проте для формування масиву рядкових елементів допустиме використання константи varОleStr.
Рис. 1. Непрямокутний однорідний масив (зліва)
і неоднорідний масив (справа)
Відмітимо, що незалежно від кількості вимірів масиву всі його елементи мають один і той же тип, що указується при виклику функції VarАrrayСreate, але якщо як тип елементів задати константу varvariant, то елементом варіантного масиву також буде варіант.
Отже, такому елементу можна присвоїти варіантний масив, причому тип його елементів також може бути довільним. Таким чином, в Delphi з'явилася можливість створення неоднорідних (що складаються з елементів різного типу) масивів, або, наприклад, однорідних масивів непрямокутної форми.
Для отримання інформації про размерності і індекси варіантних масивів в модулі Variants передбачені наступні функції:
· VarАrrayDimCount - повертає розмірність заданого варіантного масиву.
· VarArrayLowBound - повертає нижню межу індексів заданого варіантного масиву для заданого вимірювання.
· VarArrayHighBound - повертає верхню межу індексів заданого варіантного масиву для заданого вимірювання.
Опис цих функцій виглядає таким чином:
Function VarArrayDimCount (const A: Variant): Integer;
Function VarArrayLowBound (const A: Variant; Dim: Integer): Integer
Function VarArrayHighBound (constA: Variant; Dim: Integer): Integer
Приклад використання і тих, і інших приведений в лістингу 6.
Лістинг 6. Робота з варіантними масивами
Var V: variant; { Опис варіантної змінної}
L1, H1, L2, Н2: Integer; { Опис чотирьох цілочисельних змінних)
Begin
V:= Vararraycreate ([0, 5, 3, 8], varІnteger);
{ Створення двомірного варіантного масиву цілочисельних елементів, аналогічного по опису масиву Array[0..5, 3..8] of Integer}
L1:= VarArrayLowBound(V, 1);
{Визначення мінімально можливого індексу елементу для першого виміру варіантного масиву V і занесення його в змінну L1 (значення 0)}
H1:= VarArrayHighBound(V, 1);
{Визначення максимально можливого індексу елементу для першого вимірювання варіантного масиву V і занесення його в змінну H1 (значення 5) }
L2:= VarArrayLowBound (V, 2);
{Визначення мінімально можливого індексу елементу для другого виміру варіантного масиву V і занесення його в змінну L2 (значення 3)}
Н2:= VarArrayHighBound (V, 2);
{Визначення максимально можливого індексу елементу для другого вимірювання варіантного масиву V і занесення його в змінну H2 (значення 8) }
Дата добавления: 2015-07-11; просмотров: 114 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Автоматичне приведення типів | | | Знищення варіантних змінних |