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