Fortran 派生数据类型

示例

定义一个新类型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具有以下的类型名称(它们是列在括号中列出了三个类型参数rows,cols和k)。在每个类型参数的声明中,必须指出它们是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.。