有什么实际区别
subroutine fillName(person)
type(PersonType), intent(inout) :: person
person%name = "Name"
end subroutine
或以下
subroutine fillName(person)
type(PersonType), pointer :: person
person%name = "Name"
end subroutine
pointer
具有简单描述所没有的特定参数要求。基本上,虚拟参数person
必须与指针目标相关联。它可以通过分配或简单的指针分配(=>
)。需要注意的重要一点是,person
在子例程执行期间对虚拟参数的指针关联的任何更改都将反映在传递的实际参数中。简单的描述将通过引用传递实际参数,而不是指针关联。
如果我假设关键字是实用的,那么您给出的示例中的实际差异将是可读性,因为它们都有效但intent(inout)
更明确。
技术上的区别在于指针可能为空或未确定,而intent(inout)
变量必须被分配。指针也可以在子例程中关联或无效,但虚拟参数intent(inout)
不能。
如果您既不指定也不指定pointer
,intent(inout)
并且在参数中传递了一个指针,那么它必须是关联的。