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,所以这不行,有什么建议吗?
@Javier Martin 写道“不使用您的阵列的当前布局”,但错过了提出替代方案的机会。
如果您改为如下声明变量:
real triangle(0:1, 0:2)
倒车边界的顺序,然后你可以通过triangle(0,0)
,triangle(0,1)
或triangle(0,2)
到子程序,并得到正是你想要的行为,因被称为“序列协会”一个Fortran功能。当您将单个数组元素传递给作为数组的虚拟参数时,您将按数组元素顺序隐式传递该元素和后续元素。这是对正常 Fortran 形状匹配规则唯一允许的违反,并且是 FORTRAN 77 的一部分。