Fortran 77中的Char数组维度混淆

oso*_*maz 1 fortran fortran77 fortran-common-block

我的子程序中有以下代码:

character    x*256 ,y*80
common /foo/ x     ,y(999)
Run Code Online (Sandbox Code Playgroud)

好吧,我实际上并没有写这个.所以我不明白这里的尺寸.是y一个999元素宽的80字符长字符串数组?

如果是这样,如何在没有公共块的情况下在Fortran 90中正确定义?

fra*_*lus 5

我首先要说的是你拥有的代码是"正确的"Fortran 90,但我同意你想要摆脱常见的阻塞.

基本上,没有任何具体的声明的性质.每当

<type> A
common /foo/ A(<size>)
Run Code Online (Sandbox Code Playgroud)

使用A的声明有两个部分,以及常见的关联:类型和维度.忽略关联,common允许在语句中声明维度,以上就是这样

<type> A
dimension A(<size>)
Run Code Online (Sandbox Code Playgroud)

这反过来也是如此

<type>, dimension(<size>) :: A
Run Code Online (Sandbox Code Playgroud)

来到具体示例,类型是长度为80的字符.您的非常见声明就是

character(len=80), dimension(999) :: y
Run Code Online (Sandbox Code Playgroud)

实际上,这y是一个长度为80个字符的999大小的排名1阵列. y(10)是一个标量长度为80的字符(数组的第10个元素y).

x(10)语法不正确,因为(10)是数组索引,并且x是标量.对于子字符串,需要不同的索引. x(10:10)是字符变量的第10个字符x; y(10)(10:10)是字符数组的第10个元素的第10个字符y.