Динамические массивы в Delphi (array, SetLength, TListBox) |
![]() |
![]() |
Автор megabax | ||||||
28.08.2009 г. | ||||||
Динамические массивы в Delphi (array, SetLength, TListBox)Исходник урока можно скачать здесь. Массив - это упорядоченный набор данных. Как правило, количество элементов массива ограничено. Среда Delphi использует синтаксис языка Object Pascal, а согласно последнему, массивы объявляются так:
Где index1...indexN принадлежат упорядоченному типу, диапазон которого, как написано в документации по Delphi 6, не превышает 2Gb. BaseType - это тип элементов массива. Пример:
мы объявили массив, состоящий из 1000 элементов типа double (числа с плавающей точкой), с индексом от 0 до 999. Массивы могут быть одномерные, двухмерных, трехмерные. N-мерные. Теоретически, ограничения на мерность нет. На практике размерность ограничивает объем памяти. Сейчас мы рассмотрели статистические массивы. В отличии от динамических, у них есть существенный недостаток. Во многих случаев мы не знаем, из скольких элементов будет состоять наш массив, а его размер изменить в ходе выполнения программы невозможно. По этому приходиться резервировать память "про запас", что согласитесь, не очень рационально. Как пример такой задачи - чтение информации из файла. Мы не знаем заранее, сколько в нем содержаться элементов. Как выход из положения, вместо массива для хранения загруженных данных можно использовать динамические списки, организованные по принципу LIFO (Last In First Out, стек) или FIFO (First In First Out, очередь). Разработчики Delphi, в версиях начиная с пятой, реализовали достаточно гибкий механизм работы с динамическими массивами. Для их объявления используется синтаксис
При таком объявлении память не выделятся, и первоначальный размер массива - нулевой. Для установки длины массива
где LengthOfArray - количество элементов массива. У динамических массивов есть интересное свойство. Если сделать присвоить переменной массив, то его содержимое не копируется, присваивается только указатель на массив. А вот если применить к новому массиву SetLength, то тогда и произойдет копирование. Рассмотрим все это на примере:
При выполнении перовой процедуры мы увидим такой результат: а при выполнении второй вот такой: |
||||||
Последнее обновление ( 18.02.2013 г. ) |
« След. |
---|