Pointers 什么是=>;(等于大于)Fortran中的平均值?
我正在浏览一些旧的Fortran 90代码,发现了Pointers 什么是=>;(等于大于)Fortran中的平均值?,pointers,fortran,variable-assignment,fortran90,Pointers,Fortran,Variable Assignment,Fortran90,我正在浏览一些旧的Fortran 90代码,发现了=>符号: var => item 它看起来像是被用于某种任务 在Google上搜索“arrow symbol Fortran”或“等于大于symbol Fortran”并没有提供任何相关资料。令人惊讶的是,搜索“equals arrow symbol Fortran”会得到一些结果 “=>”通常被称为。 (虽然它不是,因为它不返回值。) 它用于将所选引用名称与目标关联: reference => target 上述内容可理解为“
=>
符号:
var => item
它看起来像是被用于某种任务
在Google上搜索“arrow symbol Fortran”或“等于大于symbol Fortran”并没有提供任何相关资料。令人惊讶的是,搜索“equals arrow symbol Fortran”会得到一些结果
“=>”通常被称为。(虽然它不是,因为它不返回值。) 它用于将所选引用名称与目标关联:
reference => target
上述内容可理解为“参考系指目标”
最常见的是,这种引用以文本形式出现。在这种情况下,您可以说“目标的参考点”。这是记住此运算符所做操作的一种有用方法,因为它的文字外观是一个从引用指向目标的箭头
进一步使用其他用途包括为各种项目(如模块组件、过程,甚至任意表达式)生成本地别名。有关所有这些用途的完整说明,请参阅 指针分配与传统分配(=)
下面是上面链接中的一个快速示例,说明指针赋值与经典赋值(“=”)的区别。基本上,这表明一旦建立了目标,指针就被视为基本语句的目标
pt => x ! pt points to x
y = pt ! y equals x
pt => y ! pt points to y
pt = 17 ! y equals 17
其他资源:=>
在现代Fortran中作为一个语法元素出现在六种上下文中,许多(但不是全部)与指针相关:指针赋值;指针初始化;程序(指针)声明;类型绑定程序声明;协会;重命名。其中大多数之间有着密切的联系。松散地说,在许多情况下,可以将=>
视为提供了引用另一个实体的替代临时或永久方法。但是,在none中,=>
充当运算符。1
指针赋值
指针赋值是Fortran 90中出现的=>
的传统外观之一。它用于将指针与目标关联,并在中进行了说明
使用关联重命名
使用关联的实体重命名涉及元素=>
,这是Fortran 90/95代码中的另一种外观。这样的use
语句如下
use mod_a, c=>a
use mod_b, only : cc => bb
在这样一个use
语句之后,模块实体a
和bb
由本地名称c
和cc
可知
指针初始化
指针初始化非常类似于出现=>
的指针分配。指针初始化定义指针的初始指针关联。我们在以下声明中看到了这一点:
real, target :: a
real, pointer :: b=>a
real, pointer :: c=>NULL()
通过此显式初始化,此处的指针b
最初与a
关联,而指针c
最初不关联。这两种形式在现代Fortran中很有用,因为在Fortran 90中,指针总是以未定义的关联状态开始使用。这里我们知道b
和c
定义了指针关联状态,我们可以使用ASSOCIATED
对于派生类型组件,这种语法提供默认初始化
程序声明
与数据对象的显式/默认初始化类似,=>
的特点是定义过程指针的初始关联
procedure(proc_interface), pointer :: proc1 => donkey
procedure(proc_interface), pointer :: proc2 => null()
在这里,proc1
最初再次与过程assy
关联,我们可以有如下内容
call proc1(...)
当proc1
的指针在声明语句之外被赋值为assk
时,我们可以做的很多<代码>程序2与预期一样,最初没有关联
与派生类型的数据对象组件一样,=>
可以设置对象绑定过程的初始关联
type a
procedure(proc_interface), pointer :: proc => donkey
end type a
类型绑定过程声明
与上述概念相关的是在声明类型绑定过程中使用=>
type a
contains
procedure :: proc => donkey
generic :: assignment(=) => type_a_eq
end type a
此处类型a
proc
是一个绑定名称,因此b%proc
(对于b
类型a
的实体)是一个过程参考。我们还通过type\u a\u eq
定义了左侧a
类型实体的赋值
联想
=>
出现在三个关联上下文中。关联
、选择类型
和选择等级
构造将名称与选择器关联
从Fortran 2003开始,我们有
associate (a => 1+2)
... ! In this block we have an entity named a
end associate
及
在Fortran 2018(当前草案)中引入我们
dimension(..) b ! b is assumed rank
select rank (a => b)
rank (1)
... ! a is a rank-1 array here
end select
这些关联不同于指针<associate
块中的code>a不必是变量(在上面的示例中也不是)
[1] 运算符的概念是在Fortran语言中精确定义的,如Fortran 2008规范的3.2.4。与许多其他语言不同,赋值(带有
=
)本身不是一个操作,而是一个语句。在类C语言中,我们可以将(a=b)
作为返回结果的表达式:Fortran中不是这样。Fortran中的指针赋值也是如此。上述其他情况完全不同于这种分配观念。在Fortran中,即使初始化中出现的=
,也与赋值不同=>
不能被视为有一种效果。我无法相信,如果不明确知道这个操作符的名称(特别是对于一种已经存在这么久的语言),要找到它的基本信息是多么困难。希望这次问答能够纠正这种情况。
dimension(..) b ! b is assumed rank
select rank (a => b)
rank (1)
... ! a is a rank-1 array here
end select