gpt4 book ai didi

arguments - fortran意图(in,out,inout)之间的明显区别是什么?

转载 作者:行者123 更新时间:2023-12-03 13:27:45 26 4
gpt4 key购买 nike

在书籍中搜索了一段时间后,在这里有关于stackoverflow的文章,也有关于一般网络的文章,我发现很难找到对fortran参数意图之间真正差异的简单解释。我了解的方式是这样的:


intent(in)-实际参数在条目处复制到虚拟参数。
intent(out)-虚拟参数指向实际参数(它们都指向内存中的同一位置)。
intent(inout)-虚拟参数在本地创建,然后在过程完成时复制到实际参数。


如果我的理解是正确的,那么我也想知道为什么有人要使用intent(out),因为intent(inout)需要更少的工作(无需复制数据)。

最佳答案

意图只是对编译器的提示,您可以丢弃该信息并违反它。意图几乎完全存在,以确保您仅执行计划在子例程中执行的操作。编译器可能会选择信任您并优化某些内容。

这意味着intent(in)不能按值传递。您仍然可以覆盖原始值。

program xxxx  
integer i
i = 9
call sub(i)
print*,i ! will print 7 on all compilers I checked
end
subroutine sub(i)
integer,intent(in) :: i
call sub2(i)
end
subroutine sub2(i)
implicit none
integer i
i = 7 ! This works since the "intent" information was lost.
end

program xxxx
integer i
i = 9
call sub(i)
end
subroutine sub(i)
integer,intent(out) :: i
call sub2(i)
end
subroutine sub2(i)
implicit none
integer i
print*,i ! will print 9 on all compilers I checked, even though intent was "out" above.
end

关于arguments - fortran意图(in,out,inout)之间的明显区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1011604/

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