Fortran 数组变量的顺序对应

2023-12-29 15:32 更新
如果将 a(1) 修改为 a(3) 并保持数组 a 的长度为 10,即数组 a 和数组 x 不从第一个元素开始对应,那么源代码将无法被编译,如示例 5 的变种一所示。

要想在这种情况下还能正常编译,我们就必须扩充数组 a 的长度至少为 12。这样一来,子程序中要赋值的数都能正确存入数组 x 并返回给主程序的数组变量 a,如示例 5 的变种二所示。!!! 示例 5 的变种一

program stest5
implicit none
real a(10)
call sub(a(3))
print *, a(3)
end program stest5

subroutine sub(x)
implicit none
real x(10)
integer i
do i = 1, 10
x(i) = i
enddo
end subroutine sub

!!! 执行结果
>>> Error: Actual argument contains too few elements for dummy argument 'x' (8/10) at (1)

!!! 示例 5 的变种二
program stest5
implicit none
real a(12)
call sub(a(3))
print *, a(3)
end program stest5

subroutine sub(x)
implicit none
real x(10)
integer i
do i = 1, 10
x(i) = i
enddo
end subroutine sub

!!! 执行结果
>>> 1.00000000

其实,在子程序中也可以不定义数组的长度,将长度设置为 ​*​。

如下示例 6 所示,子程序的功能是将数组 a 中的前 n 个元素复制给数组 b。

!!! 示例 6
subroutine copy(a, b, n)
implicit none
real a(*), b(*)
integer n, i
do i = i, n
b(i) = a(i)
enddo
end subroutine copy


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号