我有以下简短的 Fortran 代码。
!==============================================
MODULE PREC
INTEGER, PARAMETER :: q=8
END MODULE PREC
!==============================================
MODULE MOD_FIT
USE prec ! q
TYPE spec
INTEGER HL,HR
COMPLEX(q), POINTER :: HMAT(:,:) ! (HL,HR)
END TYPE
END MODULE MOD_FIT
!==============================================
PROGRAM MAIN
USE prec
USE MOD_FIT ! spec
IMPLICIT NONE
!
TYPE(spec) SMP
write(*,*)'check associated:',associated(SMP%HMAT)
END
我用最新版本的gfortran编译它,并运行它。以下是我得到的
检查关联:T
它应该是 F 因为我根本没有初始化它吗?
不,您的指针的状态是不明确的。您不能使用以下方式查询它associated()
因为它可能会导致任何结果。
你应该始终做的是使用默认初始化所有指针组件并将它们初始化为null()
.
TYPE spec
COMPLEX(q), POINTER :: HMAT(:,:) => null()
END TYPE
之后你一定会得到预期的结果false.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)