在 FORTRAN-77 中传递二维数组的子数组

Not*_*666 2 arrays fortran fortran77

我有二维数组

real triangle(0:2, 0:1)
Run Code Online (Sandbox Code Playgroud)

其中“三角形”是一个向量数组(一维数组),我也有子程序

subroutine vecSub(lhs, rhs, result)
real lhs(0:1), rhs(0:1), result(0:1)
    result(0) = lhs(0) - rhs(0)
    result(1) = lhs(1) - rhs(1)
    return
end
Run Code Online (Sandbox Code Playgroud)

有没有办法将“三角形”变量中的向量之一传递给这个子程序?Fortran-90 可以做到这一点:triangle(0, :)它给出了第一个三角形数组,但我只能使用 FORTRAN-77,所以这不行,有什么建议吗?

Ste*_*nel 5

@Javier Martin 写道“不使用您的阵列的当前布局”,但错过了提出替代方案的机会。

如果您改为如下声明变量:

real triangle(0:1, 0:2)

倒车边界的顺序,然后你可以通过triangle(0,0)triangle(0,1)triangle(0,2)到子程序,并得到正是你想要的行为,因被称为“序列协会”一个Fortran功能。当您将单个数组元素传递给作为数组的虚拟参数时,您将按数组元素顺序隐式传递该元素和后续元素。这是对正常 Fortran 形状匹配规则唯一允许的违反,并且是 FORTRAN 77 的一部分。