Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
В Delphi добавлена интересная возможность описания массивов без указания размерностей и, соответственно, пределов изменения индексов:
Var
IntArray: Array of Integer;
Такие массивы являются динамическими и изначально имеют нулевую длину. Установка размера массива и определение его во время выполнения программы производится так же как и для строк, с помощью функций SetLength и Length, соответственно. Элементы в данном случае нумеруются от нуля.
Program UsingDynamicArrays1;
Var
А, В: Array of Integer; {Описание двух переменных — динамических
массивов целочисленных элементов}
Begin
SetLength(A, 5); {Установка размера массива А (5 элементов)}
А[0]:= 1; {Присвоение значения 1 элементу массива А с номером 0 }
End.
Переменные — динамические массивы являются указателями и операции с ними производятся как с указателями. Например, при присвоении одного массива другому элементы одного массива не копируются во второй, а копируется адрес массива. Соответственно, сравнение двух массивов в логических выражениях типа «равно — не равно» производится сравнением адресов. Пример присвоения одного массива другому приведен в листинге 2.10.
Листинг 2.10. Пример присвоения одного массива другому
Program UsingDynamicArrays2;
Var
А, В: Array of Integer; {Описание двух переменных — динамических
массивов целочисленных элементов}
Begin
SetLength(A, 5); {Установка размера массива А (5 элементов)}
А [0]:= 14; {Присвоение значения 14 нулевому элементу массива А}
В:= А; {Присвоение массива А массиву В, теперь переменные А и В
указывают на один и тот же массив}
В[0]:= 2; {Присвоение нулевому элементу массива В значения 2,
теперь нулевой элемент массива А также имеет
значение 2}
End.
Отметим существенное отличие в работе со строками и динамическими массивами, имеющими одинаковое внутреннее представление на основе указателей, но разные методы работы. Две разные строки, состоящие из одинакового набора символов, считаются равными, а два разных массива, содержащие одинаковые элементы, не равны. Приведем пример:
Var
S1, S2: AnsiString; {Описание двух строковых переменных типа
AnsiString}
A1, A2: Array of Integer; {Описание двух переменных — динамических
массивов целочисленных элементов}
Begin
S1:= 'ABCDEF'; {Присвоение строковой переменной S1 значения}
S2:= ABCDEF'; {Присвоение строковой переменной S2 значения,
аналогичного значению переменной S1. Теперь
переменные S1 и S2 равны}
SetLength(А1, 2); {Установка размера массиву А1}
SetLength(А2, 2); {Установка массиву А2 размера, равного размеру
массива А1}
А1[0]:= 0;
А1[1]:= 1;
А2[0]:= 0;
А2[1]:= 1; {Заполнение массивов А1 и А2 одинаковыми
элементами. Теперь массивы имеют одинаковые длины
и состоят из одинаковых элементов, однако не равны
между собой, так как находятся в разных местах
памяти}
А2:= А1; {Присвоение ссылки на массив А1 в переменную А2.
Теперь массивы А1 и А2 равны, так как переменные А1
и А2 указывают на одно и то же место в памяти}
Вариантные структуры данных
Дата публикования: 2014-11-02; Прочитано: 408 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!