1
module foo
contains
   subroutine bar()
      integer :: i(3)

      i(1) = 1
      i(2) = 2
      i(3) = 3
      call baz(i, i)
   end subroutine

   subroutine baz(a,b)
      integer, intent(in) :: a(:)
      integer, intent(inout) :: b(:)

      b(2) = 5
      print *, a
      print *, b
   end subroutine

end module
program xx
   use foo
   call bar()
end program

在这段代码中,我将相同的数组传递i给 baz,将其绑定到具有不同意图的参数。当然,当我打印时a,它会改变。这是未定义的行为,还是根据规范?

请注意,我完全希望这会发生。我对这种行为并不感到困惑,我只是想了解它是否有效。

4

1 回答 1

3

这是未定义的行为。Fortran 通常禁止参数别名(即多个参数指向相同的实际数据),除非参数具有 POINTER 或 TARGET 属性。

于 2012-04-18T12:07:20.643 回答