在下面的程序中,提供了两种用于传递数组的方法:
program main
integer, dimension(4) :: x = [9, 8, 7, 6]
call print_x(x(2:3)) ! Method 1
call print_x(x(2)) ! Method 2
end program
subroutine print_x(x)
integer, dimension(2), intent(in) :: x
print *, x
end subroutine
两种方法都产生相同的结果:数字8和7被打印出来。就我个人而言,我永远不会使用方法2对此进行编码,因为它看起来像是传递了一个值,而不是数组。
您能否举一个例子说明何时必须使用方法2代替方法1?
答案 0 :(得分:1)
考虑程序
implicit none
integer :: x(2,2)=0
call set(x(2,1))
print*, x
contains
subroutine set(y)
integer y(2)
y = [1,2]
end subroutine set
end program
此子例程调用中的伪参数y
是与元素x(2,1)
和x(1,2)
关联的参数。 x
没有数组部分完全由这两个元素组成。