由於某種原因,我需要將Fortran指針傳遞給子例程。子程序在模塊內,主程序使用該模塊來確保顯式接口。如何將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顯示正確的輸出。
[email protected]:~/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
[email protected]:~/work/practice/fortran_pointer$
什麼是正確的?哪些不正確?或者,這些都正確嗎?
非常感謝。它幫助了很多。 – user79973