В теле процедуры могут определяться массивы, и массивы могут быть аргументами процедуры. В частности, эти массивы могут быть заданной конфигурации. Однако есть средства для определения размера или конфигурации массива внутри процедуры: автоматические массивы, массивы, перенимающие размер и массивы, перенимающие конфигурацию.
Автоматические массивы объявляются в процедуре как обычно, но граница хотя бы одного измерения задается неконстантным выражением. Это выражение может содержать другие параметры, размеры аргументов-массивов (встроенная функция SIZE) и т.п. В результате массив заранее неизвестного размера скрыт в процедуре. Такие массивы не могут инициализироваться при объявлении и не могут иметь атрибут SAVE.
У массивов, перенимающих размер, верхняя граница последнего измерения указано звездочкой *. Размер определяется по размеру фактического аргумента. Рекомендуется пользоваться массивами, перенимающими конфигурацию.
Массивы, перенимающие конфигурацию -- это массивные аргументы, при объявлении которых опущены верхние границы. Они определяются по конфигурации фактического аргумента. Опущенная нижняя граница равна 1. Например,
REAL, DIMENSION:: A(:,2:)
При использовании таких массивов процедура должна иметь явный интерфейс.
Существует поддерживаемая для совместимости возможность передачи элемента массива в качестве фактического аргумента процедуры, если формальный аргумент -- массив. При этом передается массив элементов, начиная с данного, в порядке следования элементов в массиве. Пользоваться этим методом не рекомендуется.