意图(输入/输出)和指针虚拟参数之间的区别

3

What is the practical difference in having

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个回答

2

指针有特定的参数要求,裸描述中并没有。基本上,虚拟参数person必须与指针目标相关联。这可以通过分配或简单的指针赋值(=>)来实现。需要注意的重要事项是,在子程序执行期间,对虚拟参数person的指针关联所做的任何更改都将反映在传递的实际参数中。裸描述将按引用传递实际参数,但不会传递指针关联。


1

如果我假设关键字是实用,那么你所给出的例子中实际的区别就在于可读性,因为它们都可以工作,但intent(inout)更加明确。

技术上的区别在于指针可能为空或未确定,而使用intent(inout)时变量必须被分配。指针也可以在子程序中关联或置空,但带有intent(inout)的虚拟参数则不行。

如果您既不指定pointer也不指定intent(inout),并且将指针作为参数传递,则必须将其关联。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接