我一直试图弄清楚这两行代码的含义:
TYPE(DGRID),TARGET,ALLOCATABLE :: DGRIDS(:)
...
JEK => DGRIDS(IMOD)%JEK
我正在使用代码块,IMOD以绿色字体显示,这似乎表明IMOD是一个内在函数。我理解第二行是设置指针,但我无法弄清楚为什么内在函数存在。我也不清楚如何使用JEK两次 - 第二行中的两个“JEK”是指不同的实体吗?
答案 0 :(得分:5)
@ paxdiablo的评论很有见,我只是在对代表的追求中展开一点...
TYPE(DGRID),TARGET,ALLOCATABLE :: DGRIDS(:)
声明类型为dgrid
的数组。从那以及显示的另一行,肯定在代码的其他地方有一个声明
type :: dgrid
...
<type> :: jek
...
end type
是已恢复的片段。所以jek
(我对Fortran本身不敏感)被用作dgrid
类型元素的名称。
该行
JEK => DGRIDS(IMOD)%JEK
将名为jek
的指针与数组jek
的{{1}}元素的元素imod
相关联。代码中的其他地方就是这样的声明
dgrids
如果CodeBlocks告诉你<type_of_jek>, pointer :: jek
是一个误导你的函数,即使是没有参数的函数也必须被称为imod
。 imod()
必须是整数。
名称imod
使用两次,它标识不同的内容。也许程序员的手指厌倦了反复键入jek
,程序员想到使用DGRIDS(IMOD)%
作为jek
的速记别名。使用超现代编译器,可以使用DGRIDS(IMOD)%JEK
语句实现相同的功能,尽管这不是Fortran指针的一般替代,只是用于定义别名的替代机制。