有什么实际区别
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
答案 0 :(得分:2)
pointer
具有特定的参数要求,而裸描述没有。基本上,伪参数person
必须与指针目标相关联。它可以通过分配或简单的指针赋值(=>
)。需要注意的一点是,在子程序执行期间对伪参数person
的指针关联的任何更改都将反映在传递的实际参数中。简单描述将通过引用传递实际参数,但不传递指针关联。
答案 1 :(得分:1)
如果我认为该关键字是实用,
那么你给出的例子中的实际差异就是可读性,因为它们都有效但intent(inout)
更明确。
技术差异是指针可能为空或未确定,而intent(inout)
必须分配变量。指针也可以在子例程中关联或无效,但是intent(inout)
的伪参数不能。
如果您既未指定pointer
或intent(inout)
,并且您在参数中传递指针,则必须将其关联。