意图(inout)和指针虚拟参数之间的区别

发布于 2024-10-15 21:50:24 字数 300 浏览 6 评论 0原文

有什么实际区别

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

What is the practical difference in having

subroutine fillName(person)
   type(PersonType), intent(inout) :: person

   person%name = "Name"
end subroutine

or the following

subroutine fillName(person)
   type(PersonType), pointer :: person

   person%name = "Name"
end subroutine

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷路的信 2024-10-22 21:50:24

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

pointer has specific argument requirements that the bare description does not have. Basically the dummy argument person must be associated with a pointer target. It could be through an allocation or simple pointer assignment (=>). An important thing to note is that any changes to the pointer association of the dummy argument person during the execution of the subroutine will be reflected in the actual argument passed. The bare description will pass the actual argument by reference, but not pointer association.

_畞蕅 2024-10-22 21:50:24

如果我假设关键字实用
那么您给出的示例中的实际差异将是可读性,因为它们都有效,但 intent(inout) 更明确。

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

如果您既没有指定 pointer 也没有指定 intent(inout) 并且在参数中传递了一个指针,那么它必须关联起来。

If I assume the keyword is practical,
then the practical difference in the example you give would be readability, since they both work but intent(inout) is more explicit.

The technical difference is that the pointer may be null or undetermined, whereas with intent(inout) the variable have to be allocated. A pointer can also be associated or nullified in the subroutine but a dummy argument with intent(inout) cannot.

If you don't specify neither pointer or intent(inout) and you pass a pointer in argument then it have to be associated.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文