假定和延迟长度类型参数

字符类型或具有长度参数的派生类型的变量可以具有假定延迟的长度参数。字符变量 name

character(len=len) name

贯穿执行时的长度为 len。相反,长度说明符可以是

character(len=*) ...  ! Assumed length

要么

character(len=:) ...  ! Deferred length

假设长度变量假定其长度来自另一个实体。

在功能

function f(dummy_name)
  character(len=*) dummy_name
end function f

伪参数 dummy_name 具有实际参数的长度。

名为 constant const_name in

character(len=*), parameter::const_name = 'Name from which length is assumed'

长度由右侧的常量表达式给出。

延迟长度类型参数可能在执行期间变化。具有延迟长度的变量必须具有 allocatablepointer 属性

character(len=:), allocatable::alloc_name
character(len=:), pointer::ptr_name

可以通过以下任何方式设置这样的变量长度

allocate(character(len=5) :: alloc_name, ptr_name)
alloc_name = 'Name'         ! Using allocation on intrinsic assignment
ptr_name => another_name    ! For given target

对于具有长度参数化的派生类型,语法类似

  type t(len)
    integer, len::len
    integer i(len)
  end type t

  type(t(:)), allocatable::t1
  type(t(5)) t2

  call sub(t2)
  allocate(type(t(5)) :: t1)

contains

  subroutine sub(t2)
    type(t(*)), intent(out) :: t2
  end subroutine sub

end