派生数据类型

定义一个新类型 mytype

type::mytype
  integer::int
  real    :: float
end type mytype

声明 mytype 类型的变量 :

type(mytype) :: foo

可以使用%运算符 1 访问派生类型的组件 :

foo%int = 4
foo%float = 3.142

Fortran 2003 功能(尚未由所有编译器实现)允许定义参数化数据类型:

type, public::matrix(rows, cols, k)
  integer, len::rows, cols
  integer, kind::k = kind(0.0)
  real(kind = k), dimension(rows, cols) :: values
end type matrix

派生类型 matrix 有三个类型参数,它们在类型名称后面的括号中列出(它们是 rowscolsk)。在每个类型参数的声明中,必须指出它们是 kind(kind)还是 length(len)类型参数。

类型参数(如内部类型的参数)必须是常量表达式,而长度类型参数(如内部字符变量的长度)在执行期间可能会有所不同。

请注意,参数 k 具有默认值,因此当声明 matrix 类型的变量时,可以提供或省略它,如下所示

type (matrix (55, 65, kind=double)) :: b, c ! default parameter provided
type (matrix (rows=40, cols=50)     :: m    ! default parameter omitted

派生类型的名称可能不是 doubleprecision 或与任何内在类型相同。

  1. 许多人想知道为什么 Fortran 使用%作为组件访问运算符,而不是更常见的 .。这是因为 . 已经被运算符语法所取代,即 .not..and..my_own_operator.