codecamp

Fortran 数组作为子程序参数

如果主程序想要用数组变量或数组变量的某个位置的值为调用的子程序赋值,Fortran 也是完全支持的。如下所示,第一行是用数组变量初始化子程序参数,第二行是用数组变量 a 中编号为 1 的元素初始化子程序参数。

call sub(a)
call sub(a(1))

上面第一行调用方式对应的主程序和子程序可以类似于下面的示例 5。主程序和子程序中分别将 a 和 x 都定义为长度为 10 的一维数组,并在子程序中使用循环的方式依次为数组 x 的每个元素赋值。最后,赋好值的数组 x 也会返回给主程序。从执行结果看到,输出结果为期待的 a(3) 值。

!!! 示例 5
program stest5
implicit none
real a(10)
call sub(a)
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

!!! 执行结果
>>> 3.00000000

如果我们在调用时写成了 ​call sub(a(1))​,那会怎么样呢?实际上还是会得到一样的结果。


Fortran 子程序的返回值
Fortran 数组变量的顺序对应
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }