Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
45
Добавлен:
14.04.2015
Размер:
543.74 Кб
Скачать

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

Атрибут dimensionописывает массивы. Параметром этого атрибута должен быть список границ индексов по каждому измерению. Количество измерений определяет ранг массива. Массив, границы индексов которого определены как константные выражения, называется статическим. Память для статического массива резервируется на этапе компиляции программы. Размер такого массива не может быть изменен в процессе вычислений.

Размер массива не всегда известен заранее. Например, для его определения нужно ввести некоторые данные или произвести вычисления. В таком случае можно использовать динамические массивы.

Динамический массив – это массив, размер которого определяется при выполнении программы, тогда же происходит и выделение памяти под него. Протяженности динамического массива по измерениям на этапе компиляции неизвестны, и атрибутdimensionопределяет только ранг «будущего» массива. Список измерений сводится к списку разделенных запятыми двоеточий, число которых равно рангу массива.

Признаком динамического массива является атрибут allocatableв его описании, например:

real, allocatable, dimension(:,:) :: X

Определение фактических границ массива и выделение памяти для него производится оператором allocateна этапе выполнения программы, когда размер динамического массива уже определен.

Общий вид оператора allocate:

allocate(список выделяемых массивов)

где каждый элемент списка массивов имеет вид:

имя массива (нижняя граница:верхняя граница)

По умолчанию значение нижняя границаравно 1.

Пример.

real, allocatable, dimension(:,:) :: X

integer, allocatable, dimension(:) :: Y

. . .

N = 5

allocate(X(1:N,1:N)) ! Выделение памяти для X: X(1:5, 1:5)

allocate(Y(1:Size(X)))!Выделение памяти для Y: Y(1:25)

где N– переменная целого типа с определенным положительным значением. Размер одномерного массиваYравен размеру (количеству элементов) двумерного массиваX.

Выделенная память автоматически не освобождается, ее необходимо освобождать оператором deallocate, например:

deallocate(X, Y)

Соседние файлы в папке Фортран_Лекции