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

 值引用地址引用的定义:值引用是指引用值而不引用原来的变量或者存储器中对应的地址,地址引用是指引用原来的变量或者存储器中对应的地址。

值引用地址引用的区别:前者不会因子程序的操作而发生改变,后者可能会因子程序的操作而发生改变。如果我们仅仅是为了传递某个值给子程序作为输入,可以采用值引用,从而避免对于主程序的干扰。如果我们希望子程序的操作改变变量的值,可以采用地址引用。


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

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号