codecamp

Fortran 数组变量的顺序对应

如果将 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


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; }