4

也许这是一个非常愚蠢的问题,人们真的应该以不同的方式做到这一点,但是:有没有可能有类似的东西

type food
 INTEGER :: NBananasLeft(NBananaTypes)
 INTEGER :: NApplesLeft(NAppleTypes)
end type food

在编译时不知道 NBaranaTypes 和 NAppleTypes 在哪里?

4

1 回答 1

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
于 2013-02-26T13:52:46.293 回答