gpt4 book ai didi

fortran - 意图(输出)和可分配的 Fortran 数组 : what is really done?

转载 作者:行者123 更新时间:2023-12-05 00:42:44 27 4
gpt4 key购买 nike

我在 Stack Overflow 上的许多帖子中读到,可分配数组在传递到虚拟参数为 intent(out) 的子例程中时会被释放。

如果我考虑以下代码:

program main

real, dimension(:), allocatable :: myArray
integer :: L=8

allocate(myArray(1:L))
call initArray(myArray)
print *, myArray

contains

subroutine initArray(myArray)
real, dimension(:), intent(out) :: myArray

myArray(:) = 10.0

end subroutine initArray

end program main

输出是正确的。因此,当释放发生时,内存被释放但数组形状保持不变。准确吗?任何详细的解释将不胜感激。

我阅读了有关该主题的不同帖子(Can I use allocatable array as an intent(out) matrix in Fortran?What is the effect of passing an allocatable variable into a subroutine with non-allocatable argument?,...)。所以我知道数组已被释放,但我想了解它的含义,因为在我的代码中,大小保持不变,我也很惊讶这段代码有效。

最佳答案

你对这里发生的事情有点误解。

在进入带有 intent(out) 的过程时释放的数组是对应于可分配虚拟对象的可分配数组。

intent(out) 对参数的意义完全取决于 dummy 而不是 actual 参数的特性。

对应于普通虚拟参数的可分配实际参数被释放。 (如果是,那么不可分配的虚拟参数就必须不分配!)

相反,实际参数的分配状态保持不变,假设(非延迟)形状虚拟参数的形状保持不变。

虚拟参数变为未定义,作为 intent(out)。对于这里的普通虚拟参数,that 仅指其值(在该赋值语句中立即定义)。

关于fortran - 意图(输出)和可分配的 Fortran 数组 : what is really done?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72336483/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com