Форма
real, dimension(:) :: arr
объявляет массив предполагаемой формы , а форма
real :: arr(*)
объявляет предполагаемый размер .
И, да, между их использованием существуют различия. Различия возникают из-за того, что, примерно, компилятор «знает» форму массива предполагаемой формы, но не массива предполагаемого размера. Дополнительная информация, доступная компилятору, означает, что, помимо прочего, массивы предполагаемых форм могут использоваться в выражениях всего массива. Массив предполагаемого размера может использоваться только в выражениях целого массива, когда он является фактическим аргументом в ссылке на процедуру, которая не требует формы массива. О, а также в вызове внутреннему lbound
- но не в вызове внутреннего ubound
. Существуют и другие тонкие, и не очень тонкие различия, которые обнаруживают ваше близкое чтение стандарта или хорошей книги Fortran.
Некоторые советы для новых программистов Fortran - использовать массивы предполагаемой формы, когда возможное. Они не были доступны до Fortran 90, поэтому вы увидите множество массивов предполагаемого размера в старом коде. Предполагаемые формы массивов лучше в новом коде, потому что функции shape
и size
могут использоваться для запроса их размеров, чтобы избежать ошибок за пределами границ и allocate
массивов, размеры которых зависят от размеров входных массивов .