fortran - 自动分配数组的正确语法
问题描述
我目前正在编写一个小的 Fortran 代码(90/03)。我对一个简单的语法有一个严重的怀疑:
INTEGER :: BB
DOUBLE PRECISION,DIMENSION(10) :: CC
INTEGER,DIMENSION(:),ALLOCATABLE :: AA
BB=10
... (many things to declare double precision values in CC)
AA=pack([( i,i=1,BB )],mask=CC.GT.0.0) ! size(CC,1)=BB
我可以使用这种语法吗?我需要AA
在通话前分配pack
吗?使用这种语法有风险吗?
解决方案
语法是正确的(除了遗漏的部分,我们对此无能为力)。
我可以使用这种语法吗?
是的。
我需要
AA
在通话前分配pack
吗?
不会。可分配的数组会在超出范围时自动分配和释放。不管右边的对象是任何函数的结果还是其他东西,例如文字数组。
使用这种语法有风险吗?
我想不出这里有什么风险。
我猜你对这条线感到困惑
AA=pack([( i,i=1,BB )],mask=CC.GT.0.0)
我将尝试解释它:
[( i,i=1,BB )]
通过隐式循环构建一个从 1 到 10 的整数数组。让我们称这个数组 B=B(i)mask=CC.GT.0.0
只有前一个数组的元素 B(i) 被选择,其中 CC(i)>0 成立。pack(...)
返回上一个结果的一维数组。
推荐阅读
- python - ArcPy AttributeError: 'module' object has no attribute 'FromGeohash'
- java - Intent dont workin android studio
- ansible - Ansible:将字符串附加到文件中的现有行
- kml - 我可以设置高度模式或全局拉伸(仅一次)吗?
- java - How can i use two buttons in setOnDragListener?
- ios - 如何使滚动视图滚动*和*同时满足不同尺寸设备的约束
- javascript - Angular6 Recursive List Drag and Drop CDK
- android - 当我的应用程序进行电池优化时,为什么我无法收到推送通知?
- javascript - 如何在wordpress中隐藏或隐藏下载链接,如果直接复制粘贴则不允许访问?
- java - while 循环返回随机数而不是字符串