Fortran中-fcray-pointer动态数组的使用

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中-fcray-pointer动态数组的使用)