Fortran 90中声明可分配数组的区别

5

有什么区别吗?

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

并且

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

在什么情况下我们会使用第一个版本? 也许我对可分配数组的理解有误,第二个版本是否是可分配数组?
2个回答

8
第二种情况确实没有可分配的a。然而,它是一个自动对象。
在实现层面忽略内存使用的实际差异,这有很大的区别。是的,在allocate和自动创建后,每个a(假设问题中没有明确说明的事项)都是一个本地变量,大小为n,但在第一种情况下它是可分配的。它可以被释放,重新分配(可能是到不同的大小),然后再次释放。等等。
自动对象(第二种情况)则不能这样做。

这假设 a 不像 n 一样是一个虚拟参数,但即使它是,大部分仍然适用。 - francescalus

2

第一种情况是可分配数组。数组中的元素数量可以在任何作用域内动态分配或重新分配。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接