class(*) 有挺多妙用的呀。 
对于一些函数里不对输入数据进行操作,直接传递出去的,都可以用它。 
 
我写过一个转换大小端的程序,用了 class(*) 之后,我就不需要为 real4 , real8 , real16 , integer2, integer4 , integer8 分别写一次了。 
 
[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode program main
  implicit none
  Integer :: a
  Real :: b
  a = 3
  b = 1.0
  write(*,'("0x",z8.8)') a
  call CnvrtEndian( a , 4 )
  write(*,'("0x",z8.8)') a
  write(*,'("0x",z8.8)') b
  call CnvrtEndian( b , 4 )
  write(*,'("0x",z8.8)') b
contains
  Subroutine CnvrtEndian( byteIn , nByte )
    use , intrinsic :: ISO_C_Binding
    class(*) , target , Intent(INOUT) :: byteIn
    integer  , Intent(IN)             :: nByte
    character , pointer :: p(:)
    call c_f_pointer( c_loc(byteIn) , p , [nByte] )
    p = p(nByte:1:-1)
  End Subroutine CnvrtEndian
  
end program main |