Arrays Fortran 90在声明可分配数组方面的差异

Arrays Fortran 90在声明可分配数组方面的差异,arrays,memory-management,fortran,fortran90,gfortran,Arrays,Memory Management,Fortran,Fortran90,Gfortran,两者之间有区别吗 integer, intent(in) :: n integer, dimension(:), allocatable :: a allocate(a(n)) 及 在哪种情况下我们会使用第一个版本? 也许我误解了可分配数组,第二个版本甚至是可分配数组吗?第二个案例确实没有可分配数组。然而,它是一个自动对象 忽略在实现级别上内存使用的实际差异,存在很大的差异。是的,每个a都是一个局部变量(假设问题中没有明确说明),在allocate和自动创建之后,其大小为n,但在第一种情况下,

两者之间有区别吗

integer, intent(in) :: n
integer, dimension(:), allocatable :: a
allocate(a(n))

在哪种情况下我们会使用第一个版本?
也许我误解了可分配数组,第二个版本甚至是可分配数组吗?

第二个案例确实没有可分配数组。然而,它是一个自动对象

忽略在实现级别上内存使用的实际差异,存在很大的差异。是的,每个
a
都是一个局部变量(假设问题中没有明确说明),在
allocate
和自动创建之后,其大小为
n
,但在第一种情况下,它是可分配的。它可以被解除分配、重新分配(可能是到不同的大小),然后再次解除分配。等等


不能使用自动对象(第二种情况)。

第一种情况是可分配数组。数组中的元素数量可以在运行时在任何范围内动态分配或重新分配


第二种情况是由伪参数定义的固定数量元素的自动数组。根据伪参数中传递的大小,只能在调用它的过程中本地更改它的大小

这假设
a
不像n那样是一个伪参数,但如果它很大,则仍然成立。
integer, intent(in) :: n
integer, dimension(n) :: a