Fortran:类型未知大小的数组

时间:2013-02-26 13:46:06

标签: arrays types fortran

也许这是一个非常愚蠢的问题,应该以不同的方式做到这一点,但是: 是否有可能有像

这样的东西
type food
 INTEGER :: NBananasLeft(NBananaTypes)
 INTEGER :: NApplesLeft(NAppleTypes)
end type food

在编译时不知道NBananaTypes和NAppleTypes?

1 个答案:

答案 0 :(得分:4)

在Fortran 90-95:

type food
 INTEGER,pointer :: NBananasLeft(:)
 INTEGER,pointer :: NApplesLeft(:)
end type food

您必须使用allocate(var%NBananasLeft(NBananaTypes)))自行分配数组。

在Fortran 2003中:

type food
 INTEGER,allocatable :: NBananasLeft(:)
 INTEGER,allocatable :: NApplesLeft(:)
end type food

您还必须使用allocate(var%NBananasLeft(NBananaTypes)))自行分配数组,但是可以避免内存泄漏的可能性。

在Fortran 2003中,通过参数化数据类型(只有少数编译器支持):

type food(NBananaTypes,NAppleTypes)
 integer,len :: NBananaTypes,NAppleTypes
 INTEGER :: NBananasLeft(NBananaTypes)
 INTEGER :: NApplesLeft(NAppleTypes)
end type food