本文的情况是,在调用子程序的时候,不清楚数组的大小。
其实,就是只要在主程序定义好接收的数组是动态数组,然后在子程序同样定义输出数组为动态数组,然后在子程序直接allocate,貌似allocate可以在主程序子程序间传递,所以直接接收就好了。如下示例代码:
module dynamic_array_module
implicit none
contains
subroutine create_dynamic_array(array, n)
real, allocatable, intent(out) :: array(:,:)
integer, intent(out) :: n
n = 5
allocate(array(n,n))
array = 1.0
end subroutine create_dynamic_array
end module dynamic_array_module
program main_program
use dynamic_array_module
implicit none
integer :: n
real, allocatable :: result_array(:,:)
call create_dynamic_array(result_array, n)
! 在这里,可以使用result_array进行操作
deallocate(result_array)
end program main_program
运行后可以发现,result_array可以直接接收到子程序中的array。