class(*) 有挺多妙用的呀。
对于一些函数里不对输入数据进行操作,直接传递出去的,都可以用它。
我写过一个转换大小端的程序,用了 class(*) 之后,我就不需要为 real4 , real8 , real16 , integer2, integer4 , integer8 分别写一次了。
[Fortran] 纯文本查看 复制代码 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 |