之间有区别吗?
integer, intent(in) :: n
integer, dimension(:), allocatable :: a
allocate(a(n))
和
integer, intent(in) :: n
integer, dimension(n) :: a
在哪种情况下我们会使用第一个版本? 也许我误解了可分配的数组,第二个版本甚至是可分配的数组?
答案 0 :(得分:6)
第二种情况确实没有a
可分配。但是,它是自动对象。
忽略实现级别内存使用的实际差异,存在很大差异。是的,每个a
是(假设问题中没有明确说明的话)一个局部变量,在allocate
和自动创建之后,大小为n
,但在第一种情况下它是可分配的。它可以被释放,重新分配(可能是不同的大小),并再次释放。等等。
自动对象(第二种情况)不能。
答案 1 :(得分:1)
第一种情况是可分配的数组。可以在运行时在任何范围内动态分配或重新分配数组中的元素数。
第二种情况是由伪参数定义的固定数量元素的自动数组。根据伪参数中传递的大小,它的大小只能在调用它的过程中在本地更改。