Fortran指针分配,"=>"和"="的区别

4

我很难理解在Fortran 95中将一个指针分配给另一个指针时=>=的不同行为。也就是说,如果我有一个派生的数据类型foo,那么下面代码片段的最后两行之间的区别是什么,它们等价吗?

type(foo), target :: f
type(foo), pointer :: p1, p2

f = foo(...)
p1 => foo

p2 => p1
p2 = p1
1个回答

8
不,它们绝对不等同,混淆它们会有很大的后果(比如Fortran Functions with a pointer result in a normal assignment)。 =值赋值(或者精确点说是赋值),它会将右侧存储的值复制到左侧。如果左侧是一个指针,它会将该值复制到指针的目标位置。如果指针没有指向任何地方(null)或指向某个未定义的位置(垃圾地址),这是一种未定义行为,但崩溃的可能性非常高。 =>指针赋值,左侧必须是一个指针,右侧必须是一个目标或指针。左侧的指针将指向右侧的目标(或指针的目标)。如果左侧的指针已经指向了某个内存,该内存以前是通过指针的allocate语句分配的,并且它是唯一指向那里的指针,那么该内存将丢失(内存泄漏)。

啊,这很有道理,我觉得我最初没有理解的部分是=将左侧指针的目标赋值。非常启发人! - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接