Fortran,仅使用起始索引传递数组

时间:2019-07-16 18:53:15

标签: fortran

在下面的程序中,提供了两种用于传递数组的方法:

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?

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没有数组部分完全由这两个元素组成。