有什么区别吗?
integer, intent(in) :: n
integer, dimension(:), allocatable :: a
allocate(a(n))
并且
integer, intent(in) :: n
integer, dimension(n) :: a
在什么情况下我们会使用第一个版本? 也许我对可分配数组的理解有误,第二个版本是否是可分配数组?
有什么区别吗?
integer, intent(in) :: n
integer, dimension(:), allocatable :: a
allocate(a(n))
并且
integer, intent(in) :: n
integer, dimension(n) :: a
a
。然而,它是一个自动对象。allocate
和自动创建后,每个a
(假设问题中没有明确说明的事项)都是一个本地变量,大小为n
,但在第一种情况下它是可分配的。它可以被释放,重新分配(可能是到不同的大小),然后再次释放。等等。第一种情况是可分配数组。数组中的元素数量可以在任何作用域内动态分配或重新分配。
第二种情况是由虚拟参数定义的固定元素数量的自动数组。它的大小只能在调用该过程的本地范围内更改,根据传递给虚拟参数的大小。
a
不像n
一样是一个虚拟参数,但即使它是,大部分仍然适用。 - francescalus