Опрос

Что вас больше интересует?

  • игры для nokia
  • темы на телефон
  • программы на мобильный
  • обзоры мобильных телефонов


 

Какие игры вы предпочитаете?

  • игры для мальчиков
  • игры для девочек
  • драки
  • стрелялки
  • логические игры
  • спортивные


 

счетчики

Спонсор раздела:

Отсчет элементов динамического массива

Статьи

Отсчет элементов динамического массива всегда начинается с нуля. При работе с многомерным динамическим массивом, например следующего вида:

var MyArray : Array of Array of Char;

все размерности массива можно задавать одновременно:

SetLength(MyArray, 10, 5); //распределили память для 2-мерного массива

или последовательно для каждого индекса. Массивы с переменной длиной по разным индексам называют динамическими разреженными массивами.

SetLength(MyArray,3); //массив состоит из 3 строк

SetLength(MyArray[0],3); //в нулевой строке 3 элемента

SetLength(MyArray[1],2); //в первой строке 2 элемента

SetLength(MyArray[2],10); //во второй строке 10 элементов

Раньше для освобождения памяти, выделенной для динамического массива, применяли процедуру Finalize().

Finalize(MyArray);

Теперь это делать необязательно, т. к. при завершении работы с массивом Delphi самостоятельно освободит занятые ресурсы.

При работе с однотипными динамическими массивами наиболее эффективным способом копирования данных из одного массива в другой считается вызов функции Copy(). Метод умеет копировать как массив целиком, так и некоторые его элементы.

var Arr1, Arr2 : array : of integer; SetLength(Arr1,4)

for i:=0 to High(Arr1) do Arr1[i]:=i; //заполнение массива данными Arr2:=Copy(Arr1); //полное копирование

Arr2:=Copy(Arr1, 0, 2); //копирование части массива

Заметьте, что мы не задаем длину второго массива, она будет определена автоматически с вызовом метода Copy(). Кроме того, динамические массивы понимают механизм ссылок.

var Arr1, Arr2 : array : of integer; Arr2:=Arr1;

Обратите внимание: при простом копировании массивы хранят данные в разных областях ОЗУ, а при использовании оператора присваивания оба массива будут ссылаться на одну и ту же область памяти. И если теперь нулевому элементу первого массива присвоить значение 10, то это же значение окажется в нулевой ячейке второго массива.

Массив можно передавать и как параметр метода, правда, с некоторыми ограничениями. Если параметр представляет собой статический массив, то массив предварительно должен быть типизирован.

type TMyArray = Array [0..5] of Byte;

procedure Proc1(Arr : TMyArray);

var i : integer;

begin

for i:=Low(Arr) to High(Arr) do Arr[i]:=0;

end;

Объявление процедуры с аргументом в виде динамического массива несколько проще:

procedure Proc1(Arr : Array of Byte);


Следующие статьи:
Предыдущие статьи:

Добавить комментарий


Защитный код
Обновить