解释一行Fortran代码

box*_*lk1 1 fortran fortran90

我一直试图弄清楚这两行代码的含义:

TYPE(DGRID),TARGET,ALLOCATABLE :: DGRIDS(:)
Run Code Online (Sandbox Code Playgroud)

...

JEK     => DGRIDS(IMOD)%JEK
Run Code Online (Sandbox Code Playgroud)

我正在使用代码块,IMOD以绿色字体显示,这似乎表明IMOD是一个内在函数.我理解第二行是设置指针,但我无法弄清楚为什么内在函数存在.我也不清楚如何使用JEK两次 - 第二行中的两个"JEK"是指不同的实体吗?

Hig*_*ark 5

@ paxdiablo的评论是现货,我只是在对代表的追求中扩展一点...

TYPE(DGRID),TARGET,ALLOCATABLE :: DGRIDS(:)
Run Code Online (Sandbox Code Playgroud)

声明一个类型的数组dgrid.从那以及显示的另一行,肯定在代码的其他地方有一个声明

type :: dgrid
    ...
    <type> :: jek
    ...
end type
Run Code Online (Sandbox Code Playgroud)

是一个恢复的片段.因此jek(我对Fortran本身不敏感)被用作类型元素的名称dgrid.

这条线

JEK     => DGRIDS(IMOD)%JEK
Run Code Online (Sandbox Code Playgroud)

将调用的指针jek与数组jekimod-th元素的元素相关联dgrids.代码中的其他地方就是这样的声明

<type_of_jek>, pointer :: jek
Run Code Online (Sandbox Code Playgroud)

如果CodeBlocks告诉你这imod是一个误导你的函数,那么即使是没有参数的函数也必须被称为imod(). imod必须是整数.

该名称jek使用两次,它标识不同的东西.也许程序员的手指厌倦了DGRIDS(IMOD)%反复打字,程序员也想到了jek用作速记别名的想法DGRIDS(IMOD)%JEK.使用超现代编译器,可以使用该associate语句实现相同的功能,尽管这不是Fortran指针的一般替代,只是用于定义别名的替代机制.