我有一个类似下面的类型
type BOPinfo
double precision, allocatable :: realQ4(:,:), realQ6(:,:)
end type BOPinfo
我已经能够确定当元素是实数或整数标量时,如何初始化派生类型中的元素。
但是,我不知道如何告诉一个类型为 BOPinfo
阵列的大小是多少 realQ4
和 realQ6
以及如何将它们初始化为零。有什么建议吗?
可分配(或指针)类型的组件不能有默认初始化。 这适用于延迟形状数组和allocatablepointer标量。 可分配组件的初始状态总是 "未分配"。 相反,人们会从对象的声明中分别对各个组件进行分配和归零。
type(BOPinfo) test
integer n1, n2, m1, m2
allocate (test%realQ4(n1,m1), test%realQ6(n2,m2))
test%realQ4 = 0
test%realQ6 = 0
这与默认(或显式)初始化不同,我们也可以在结构构造函数中设置值(如在 另一个答案).
在Fortran 2003中,还有其他动态大小的方法,包括参数化的派生类型(现在在最近的编译器版本中被广泛支持)。
也可以使用 构造函数 来创建一个派生类型值的表达式。构造函数是一个与类型同名的函数。
variable = BOPinfo(array1, array2)
其中 array1
和 array2
是具有适当等级的数组。你也可以通过 null()
如果你想让该组件成为 not allocated
.
在Fortran 2008中,您甚至可以省略可分配的组件,它们的状态将是 not allocated
.