【发布时间】:2016-01-23 07:21:17
【问题描述】:
由于某种原因,我需要将 Fortran 指针传递给子例程。子程序在一个模块中,主程序使用这个模块来保证显式接口。
我的问题是,为了接收传入的指针,我应该在子例程的虚拟参数上指定什么属性?
我尝试了下面的代码。
module aaa
contains
integer*4 function print_ptr_arr_1( ptr )
implicit none
integer*4, intent(in), pointer :: ptr(:)
print *, 'as pointer'
print *, size(ptr)
print '(10i3)', ptr
print *
end function print_ptr_arr_1
integer*4 function print_ptr_arr_2( ptr )
implicit none
integer*4, intent(in), target :: ptr(:)
print *, 'as target'
print *, size(ptr)
print '(10i3)', ptr
print *
end function print_ptr_arr_2
integer*4 function print_ptr_arr_3( ptr )
implicit none
integer*4, intent(in) :: ptr(:)
print *, 'as assumed shape array'
print *, size(ptr)
print '(10i3)', ptr
print *
end function print_ptr_arr_3
end module aaa
和
program main
use aaa
implicit none
integer*4 :: i1, ierr
integer*4, target :: arr(10)
integer*4, pointer :: ptr_arr(:)
do i1 = 1, 10
arr(i1) = i1
end do
ptr_arr => arr
ierr = print_ptr_arr_1( ptr_arr )
ierr = print_ptr_arr_2( ptr_arr )
ierr = print_ptr_arr_3( ptr_arr )
nullify( ptr_arr )
end program main
模块 aaa 中的三个子程序显示正确的输出如下。
sj2734@sonaram:~/work/practice/fortran_pointer$ ./a.out
as pointer
10
1 2 3 4 5 6 7 8 9 10
as target
10
1 2 3 4 5 6 7 8 9 10
as assumed shape array
10
1 2 3 4 5 6 7 8 9 10
sj2734@sonaram:~/work/practice/fortran_pointer$
什么是正确的,什么是错误的?或者,这些都是正确的吗?
【问题讨论】:
标签: pointers attributes fortran