分配派生类型的数组组件

问题描述 投票:0回答:2

我有一个类似下面的类型

 type BOPinfo

     double precision, allocatable :: realQ4(:,:), realQ6(:,:)

  end type BOPinfo

我已经能够确定当元素是实数或整数标量时,如何初始化派生类型中的元素。

但是,我不知道如何告诉一个类型为 BOPinfo 阵列的大小是多少 realQ4realQ6 以及如何将它们初始化为零。有什么建议吗?

fortran fortran90
2个回答
1
投票

可分配(或指针)类型的组件不能有默认初始化。 这适用于延迟形状数组和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中,还有其他动态大小的方法,包括参数化的派生类型(现在在最近的编译器版本中被广泛支持)。


2
投票

也可以使用 构造函数 来创建一个派生类型值的表达式。构造函数是一个与类型同名的函数。

variable = BOPinfo(array1, array2)

其中 array1array2 是具有适当等级的数组。你也可以通过 null() 如果你想让该组件成为 not allocated.

在Fortran 2008中,您甚至可以省略可分配的组件,它们的状态将是 not allocated.

© www.soinside.com 2019 - 2024. All rights reserved.