了解知识
Fortran中难免有遇到使用-fcray-pointer动态数组的时候,下面的例子从命令行指定动态数组的大小:
 
! 编译 : gfortran -fcray-pointer test.f90  
! 演示[malloc,free,pointer]的使用  
! 演示动态分配内存的数组  
! 演示指针的用法  
! 演示动态分配内存  
! Fortran源文件需要保存为UTF8,以便识别中文字符  
! 吴徐平 2013-07-20  
!------------------------------------  
program test_malloc_free_pointer  
implicit none  
!------------------------------------  
integer :: count ! 命令行参数的个数  
integer :: pn ! 动态数组大小,从命令行参数中读取  
integer :: i  
CHARACTER(len=32) :: arg !命令行参数  
!------------------------------------  
real*8 x(*)  !定义动态数组  
real*8 z   
!------------------------------------  
pointer(ptr_x,x) !定义指针  
!------------------------------------  
count = command_argument_count() !获取主程序命令行的输入参数的个数  
!------------------------------------  
if (count==1) then  
    CALL get_command_argument(1, arg)  
    read(arg,'(I4)') pn  
    if (pn<1) pn=3  
else  
    pn=5  
end if  
!------------------------------------  
ptr_x = malloc(pn*8) !- 给数组x动态分配内存  
!------------------------------------  
do i = 1, pn  
    x(i) = sqrt(1.0d0 / i) !-数组元素赋值  
end do  
!------------------------------------  
z = 0  
do i = 1, pn  
    z = z + x(i) !-参与运算  
    print *, z !-显示结果  
end do  
!------------------------------------  
call free(ptr_x) !-释放内存  
end program test_malloc_free_pointer  
 
 
有图有真相:
 
标签: Fortran
扩展知识