当前位置:  开发笔记 > 编程语言 > 正文

将可分配变量传递给具有不可分配参数的子例程有什么影响?

如何解决《将可分配变量传递给具有不可分配参数的子例程有什么影响?》经验,为你挑选了1个好方法。

假设我们有这个变量定义

Real*8, Dimension(:), Allocatable :: dblA
Allocate  (dblA(1000))

现在我调用这个子程序:

Call MySub(dblA)

其中:

Subroutine MySub(dblA)
Real*8,  INTENT(Out), DIMENSION(1000) :: dblA
End

这种做法有什么副作用?我应该避免这个吗?



1> High Perform..:

如果在传递给子例程之前已经分配了数组,则子例程与allocatable-ness无关,效果与数组是静态的相同.在你向我们展示的片段中,没有什么可以反对,也没有练习避免.但是,这些片段实际上做得很少,很容易想到扩展它们以使这个建议无效的方法.

现在帮自己一个忙,改变吧

Real*8,  INTENT(Out), DIMENSION(1000) :: dblA

Real*8,  INTENT(Out), DIMENSION(:) :: dblA

这样无论传递的数组大小如何,子程序都能正常工作.使用dblA虚拟和实际参数的名称可能也是一个坏主意,你只会迷惑自己.

并且real*8,并且从来没有,是一种标准兼容的声明8字节实数的方式.关于这一点,请参阅SO上的众多问题和答案.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有