数据块 Fortran 77 说明

Data block Fortran 77 clarification

我正在尝试访问一个数据块,它的定义方式如下

      DATA NAME /'X1','X2','X3','X4','X5','X6','X7','X8','X9','10','11',00028650
     1'12','13','14','15','16','17','18','19','20','21','22','23','24'/ 00028660

代码在纸上。请注意,这是一个旧代码,我唯一想做的就是了解数组是如何被索引的。我不是要编译它。

访问方式如下

I = 0
Loop
   I = I + 1
   write (06,77) (NAME(J,I),J=1,4)  //this is inside a write statement. 
end loop                            //77 is a format statement. 

不确定它是如何编入索引的,如果你们能阐明一些信息,那就太好了。

语法 (expr, intvar=int1,int2[,int3]) 广泛引用 隐含的 DO 循环 。有几个地方可能会发生这样的事情,input/output 语句就是这样一个地方。

一个隐含的 DO 循环使用 do 控制整型变量 intvar 计算表达式 expr,按 int3 的步骤依次取值 int1 直到值 int2 是 reached/passed。这个循环控制与在 do 循环语句中找到的完全一样。

在问题的例子中,表达式是name(j,i),整型变量j是循环变量,取值在14之间. [未提供步长 int3,因此被视为 1。] 因此输出语句与

完全相同
write(6,77) name(1,i), name(2,i), name(3,i), name(4,i)

正如我们应该注意到的那样,隐含循环的元素是按顺序展开的。 i 本身来自包含此输出语句的循环。

name 在这里可能指的是一个函数,但鉴于存在 data 语句初始化它,它必须以某种方式声明为 rank-2(字符)数组。初始化并不重要。