Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Указывает, что функция обрабатывает все массивы указанного базового типа независимо от их размера, индексации, способа выделения памяти (статически или динамически)




Замечание.

Если динамический массив распределен, его можно передать стандартным функциям Length, High, and Low. Функция Length возвращает количество элементов в массиве, функция High возвращает максимальный индекс массива (т.е., Length - 1), и функция Low возвращает 0. В случае массива нулевой длины, функция High возвращает -1.

Begin

Var

Begin

Var

Значение элемента A[0] равно 2 (в случае статических массивов A и B, A[0] был бы равен 1).

Begin

Var

Имена динамических массивов неявно являются указателями. Для освобождения памяти динамического массива надо присвоить имени nil или передать переменную процедуре Finalize. Динамические массивы автоматически освобождаются, если счетчик ссылок на них становится равен нулю. Динамические массивы длиной 0 имеют значения nil.

Распределяет в памяти 20 вещественных чисел, проиндексированных от 0 до 19. Динамические массивы всегда имеют целочисленную индексацию, всегда начинающуюся с 0.

Если X и Y – переменные одного типа динамического массива, X:=Y устанавливает X на тот же массив, что и Y. (Нет необходимости распределять память для X перед выполнением операции) В отличие от статических массивов динамические массивы не копируются автоматически перед записью в них. Например, после выполнения кода,

A, B: array of Integer;

SetLength(A, 1);

A[0]:= 1;

B:= A;

B[0]:= 2;

end;

Присваивание элементу динамического массива (например, MyFlexibleArray[2]:=7) не перераспределяет память для массива. Выход за пределы массива не выявляется во время компиляции.

Для создания независимой копии динамического массива используйте глобальную функцию Copy:

A, B: array of Integer;

SetLength(A, 1);

A[0]:= 1;

B:= Copy(A);

B[0]:= 2; { B[0] <> A[0] }

end;

Когда сравниваются переменные динамических массивов, сравниваются их ссылки а не значения элементов массивов:

A, B: array of Integer;

SetLength(A, 1);

SetLength(B, 1);

A[0]:= 2;

B[0]:= 2;

end;

A = B возвращает False, а A[0] = B[0] возвращает True.

В некоторых функциях и процедурах, параметры массивов представлены как массивы базового типа baseType без указания индексов. Например,

function CheckStrings(A: array of string): Boolean;

Многомерные динамические массивы

Для объявления многомерных динамических массивов используйте повторяющуюся array of... конструкцию. Например,

type TMessageGrid = array of array of string;

var Msgs: TMessageGrid;

объявляет двумерный массив строк. Для создания такого массива вызывайте SetLength с двумя целыми параметрами. Например, если I и J – переменные целого типа,

SetLength(Msgs,I,J);

распределяет массив I-на-J элементов, а Msgs[0,0] обозначает элемент этого массива.

 




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 293; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.