我想使用一个数组 Ar(-3:3, 5),它是模块全局中的一个可分配变量,并在一个子例程中分配它并在下一个子例程中访问它(请参见下面的代码片段)。第二个子例程中的索引是从 -3 到 3 和从 1 到 5,还是我必须在子例程中指定?
module global
real, allocatable(:,:) :: Ar
end module global
subroutine allocateAr
use global
ALLOCATE(Ar(-3:3, 5))
end subroutine allocateAr
subroutine useAr
use global
Ar(-3,1)=3.0 !is this -3,1 here or do I have to use 1,1????
end subroutine useAr
最佳答案
如果您将可分配数组作为可分配数组访问,则它们始终保留其边界。这意味着甚至可以直接使用“使用关联”或“主机关联”,如子例程 useAR
中所示,或者将它们作为可分配的虚拟参数传递。如果将它们作为假定形状或假定大小数组传递,则必须在每个调用的过程中指定下限,否则它将默认为 1。
因此,就您的情况而言,您可以使用 -3,1
。
否则我同意 Jonathan Dursi 关于全局可变状态的观点。
关于memory-management - Fortran:模块中的可分配变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16278866/