指针数组

38

我想实现一个指针数组,以便可以循环访问其中的元素。但是我不确定如何正确地实现:

TYPE(domain),POINTER              :: d01,d02,d03
TYPE(domain),DIMENSION(:),POINTER :: dom
...

dom(1) => d01
dom(2) => d02
dom(3) => d03
...

接着:

...
IF(ASSOCIATED(dom(2),d02))THEN
...

编译器(pgf90 10.6-0 64位目标在 x86-64 Linux -tp istanbul-64 上)给我这个错误消息:

 PGF90-S-0074-Illegal number or type of arguments to associated - keyword argument pointer (test_ptr.f90: 10)
  0 inform,   0 warnings,   1 severes, 0 fatal for MAIN
据我所理解,我在对指针数组进行子集操作时存在问题。 dom(2)d02都是秩为0的标量指针。正确的实现方法是什么?
谢谢。
1个回答

77

是的,在Fortran中,指针数组很有趣。

问题在于这个:

TYPE(domain),DIMENSION(:),POINTER :: dom

这不是定义指针数组,而是定义指向数组的指针。在Fortran中,这些东西有很多有趣的用处 - 指向大型数组的切片,甚至包括步长 - 但它绝对是一个指向数组的指针,而不是指针数组。

在Fortran中获取指针数组的唯一方法是定义一种类型:

type domainptr
  type(domain), pointer :: p
end type domainptr

type(domainptr), dimension(3) :: dom

dom(1)%p => d01
dom(2)%p => d02
dom(3)%p => d03

就我所知,你在Fortran中做这件事的唯一真正原因是语法。我希望在以后的标准版本中能够解决这个问题。


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