首页 > 解决方案 > 字符声明表

问题描述

下面的字符声明是什么意思

character :: c*4

它对字符有特殊意义还是适用于所有数据类型?

4是否与中的长度参数相同

character(len=4) :: c

标签: fortrancharacter

解决方案


有几种方法可以在类型声明语句中声明字符实体的长度,但这些方法的解释分布在其他几个问题和答案中,所以让我们在这里收集它们。问题的形式具有相同的效果。

字符声明语句可以使用以下形式在类型说明符中指定长度len=

character(len=4) :: ...    ! Literal constant length
character(len=n) :: ...    ! Named constant/variable length
character(len=*) :: ...    ! Assumed/implied length
character(len=:) :: ...    ! Deferred length

或使用以下*形式:

character*4   :: ...    ! Literal constant length
character*(4) :: ...    ! Another literal constant length
character*(n) :: ...    ! Named constant/variable length
character*(*) :: ...    ! Assumed/implied length
character*(:) :: ...    ! Deferred length

对于文字常量的情况,括号是可选的并且不是必需的,但对于其他情况是必需的。

或者,*可以在实体声明本身中使用该表单:

character :: a*4, b*(n), c*(*), d*(:)
character(len=2) :: x*4   ! The *4 overrides the len=2

在所有情况下,1如果未指定值,则为默认长度。

如果要以这种方式指定长度和数组形状:

character :: a(5,5)*4
character(len=2), dimension(2) :: b(5,5)*4  ! Shape and length overridden.

使用的规范形式*对于字符长度是唯一的(对于函数和变量)。即使是具有长度类型参数的非字符对象也不能使用这种语法。但是,正如 Vladimir F 所指出的,存在类似的非标准形式,例如integer*4.

最后,name*(len)表单是特定于类型声明语句的。例如,它不能在分配中使用:

character(:), allocatable :: c

allocate(character :: c*4)      ! Not allowed as length specification, use instead
allocate(character(len=4) :: c) ! or
allocate(character*4 :: c)      ! etc

推荐阅读