Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Динамические массивы



В 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...