gpt4 book ai didi

fortran - 返回数组策略比较

转载 作者:行者123 更新时间:2023-12-02 12:13:49 25 4
gpt4 key购买 nike

在 Fortran 中,我可以使用三种方法从子例程返回数组。第一个是通过 intent(out) 参数。第二个是通过将数组作为结果的函数。第三个是让一个函数具有一个指向数组的指针作为结果,该指针在函数中分配。

每种方法的优点和缺点是什么?

最佳答案

我的做法是,当函数仅更改一个变量且不产生其他输出时,使用函数返回。如果多个变量发生更改或过程执行其他操作,我会将输出变量放在参数列表中。这是一个风格的选择。使用指针可能会造成内存泄漏,尤其是作为函数参数返回的指针,因此我会避免使用此选项,除非在特定情况下有令人信服的原因。

更新:意图(输出)数组参数没有问题...不需要对数组的大小进行假设,如以下示例所示:

module example_one

implicit none

contains

subroutine two_arrays ( in_arr, out_arr )

integer, dimension (:), intent (in) :: in_arr
integer, dimension (:), allocatable, intent (out) :: out_arr

integer :: i, len

len = size (in_arr)

allocate ( out_arr (1:len) )

do i=1, len
out_arr (i) = 3 * in_arr (i)
end do

return

end subroutine two_arrays

end module example_one


program test

use example_one

implicit none

integer, dimension (1:5) :: in_arr = [ 1, 2, 4, 5, 10 ]
integer, dimension (:), allocatable :: out_arr

write (*, *) allocated ( out_arr)
call two_arrays ( in_arr, out_arr )

write (*, *) size (out_arr)
write (*, *) out_arr

write (*, *) allocated ( out_arr)
deallocate ( out_arr )
write (*, *) allocated ( out_arr)

stop

end program test

关于fortran - 返回数组策略比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4603524/

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