我很难理解在Fortran 95中将一个指针分配给另一个指针时=>
和=
的不同行为。也就是说,如果我有一个派生的数据类型foo
,那么下面代码片段的最后两行之间的区别是什么,它们等价吗?
type(foo), target :: f
type(foo), pointer :: p1, p2
f = foo(...)
p1 => foo
p2 => p1
p2 = p1
=
是值赋值(或者精确点说是赋值),它会将右侧存储的值复制到左侧。如果左侧是一个指针,它会将该值复制到指针的目标位置。如果指针没有指向任何地方(null)或指向某个未定义的位置(垃圾地址),这是一种未定义行为,但崩溃的可能性非常高。
=>
是指针赋值,左侧必须是一个指针,右侧必须是一个目标或指针。左侧的指针将指向右侧的目标(或指针的目标)。如果左侧的指针已经指向了某个内存,该内存以前是通过指针的allocate
语句分配的,并且它是唯一指向那里的指针,那么该内存将丢失(内存泄漏)。
=
将左侧指针的目标赋值。非常启发人! - Peter