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