Fortran 77中的Char数组维度混淆

时间:2014-05-21 22:08:24

标签: fortran fortran77 fortran-common-block

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

character    x*256 ,y*80
common /foo/ x     ,y(999)

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

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

1 个答案:

答案 0 :(得分:5)

我首先会说你的代码是"正确的" Fortran 90,但我同意希望摆脱常见的障碍。

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

<type> A
common /foo/ A(<size>)

用于声明A的两个部分,以及常见的关联:类型和维度。忽略关联,允许在common语句中声明维度,上面的内容就像

<type> A
dimension A(<size>)

这又与

相同
<type>, dimension(<size>) :: A

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

character(len=80), dimension(999) :: y

的确,y是一个排名为1的数组,大小为999,长度为80个字符。 y(10)是标量长度为80的字符(数组y的第10个元素)。

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