nullify(pointer)和pointer => null()的区别是什么?

7
什么是两者的区别?
procedure(some_routine), pointer :: ptr
ptr => null()

并且

procedure(some_routine), pointer :: ptr
nullify(ptr)

nullify是否在后台做了什么?还是只是两种不同的做法?

1个回答

9
结果完全相同。赋值符号=>也可以用于变量初始化或派生类型组件的默认初始化,这里nullify语句无法使用,但这只是一个语法问题,实际上它并不是一个适当的赋值语句。
例如:
  type t
    real, pointer :: ptr => null()
  end type

是组件的默认初始化方式,

 program p
   real, pointer :: ptr2 => null()

初始化是指变量的赋值。变量ptr2会被隐式地save,就像任何其他已初始化的变量一样(这是常见的错误源头)。


2
但是请注意,在结合声明和初始化时隐含了“保存”操作! - Alexander Vogt
我现在在答案中考虑了这一点。 - Vladimir F Героям слава
谢谢。我知道变量赋值,实际上我们经常这样使用,但不确定它是否是首选方式。特别是混合两者看起来有点可疑。但既然两者都是相同的,那就不应该有任何问题了。 - PVitt
完全一样。对于我展示的两种初始化类型,需要注意它们是Fortran 95而不是90。 - Vladimir F Героям слава

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