intent(inout)和指针伪参数之间的区别

时间:2011-02-02 09:57:56

标签: fortran fortran90

有什么实际区别
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

2 个答案:

答案 0 :(得分:2)

pointer具有特定的参数要求,而裸描述没有。基本上,伪参数person必须与指针目标相关联。它可以通过分配或简单的指针赋值(=>)。需要注意的一点是,在子程序执行期间对伪参数person的指针关联的任何更改都将反映在传递的实际参数中。简单描述将通过引用传递实际参数,但不传递指针关联。

答案 1 :(得分:1)

如果我认为该关键字是实用, 那么你给出的例子中的实际差异就是可读性,因为它们都有效但intent(inout)更明确。

技术差异是指针可能为空或未确定,而intent(inout)必须分配变量。指针也可以在子例程中关联或无效,但是intent(inout)的伪参数不能。

如果您既未指定pointerintent(inout),并且您在参数中传递指针,则必须将其关联。