Fortran 子程序的返回值
2023-12-29 14:55 更新
刚才提到的子程序中定义的变量是局部变量,不会干扰主程序中的其他变量,但是如果我们想要把子程序计算的结果返回给主程序呢?在其他的编程语言中,可能大部分是使用 return 加变量名的方式来将子程序中的变量传递回主程序。在 Fortran 中,子程序会将参数变量全部返回给主程序,可以认为是地址引用。如果主程序调用子程序时用一个算式传递变量给子程序,那么可以认为是值引用。
如下面的示例 4 所示,主程序中调用子程序时最后的变量 p 就是要保存返回值的变量。从执行结果也可以看出,变量 x 和 y 并没有受到子程序的影响,只有变量 p 带着子程序的变量 z 的值正确返回了。因为这里 x+y 作为子程序中的 x 存在,而 x+y 这个变量实际上在主程序中不存在,所以是值引用。
!!! 示例 4
program stest4
implicit none
real x, y, p
x = 10.0
y = 30.0
call subr4(x+y, 20.0, p)
print *, x, y, p
end program stest4
subroutine subr4(x, y, z)
implicit none
real x, y, z
z = x*y
end subroutine subr4
!!! 执行结果
>>> 10.0000000 30.0000000 800.000000
值引用和地址引用的定义:值引用是指引用值而不引用原来的变量或者存储器中对应的地址,地址引用是指引用原来的变量或者存储器中对应的地址。
值引用和地址引用的区别:前者不会因子程序的操作而发生改变,后者可能会因子程序的操作而发生改变。如果我们仅仅是为了传递某个值给子程序作为输入,可以采用值引用,从而避免对于主程序的干扰。如果我们希望子程序的操作改变变量的值,可以采用地址引用。
以上内容是否对您有帮助:
更多建议: