指针数组 [英] Arrays of pointers

查看:30
本文介绍了指针数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试实现一个指针数组,以便我可以遍历元素.但是我不确定如何正确执行此操作:

I am trying to implement an array of pointers, so that I can loop over the elements. However I am not sure how to do this correctly:

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
...

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

The compiler (pgf90 10.6-0 64-bit target on x86-64 Linux -tp istanbul-64) gives me this error message:

 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 级(标量指针).实现此目的的正确方法是什么?

As far as I understand, there is something wrong about how I subset an array of pointers. Both dom(2) and d02 are rank 0 (scalar pointers). What is the correct way to implement this?

谢谢.

推荐答案

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

Yeah, pointer arrays are funny in Fortran.

问题在于:

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

并没有像你想象的那样定义一个指针数组,而是一个指向数组的指针.在 Fortran 中,你可以用这些东西做很多很酷的事情——指向大数组的切片,即使有 strides——但它绝对是一个指向数组的指针,而不是一个指针数组.

does not define an array of pointers, as you might think, but a pointer to an array. There's a number of cool things you can do with these things in Fortran - pointing to slices of large arrays, even with strides - but it is definitely a pointer to an array, not an array of pointers.

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

The only way to get arrays of pointers in Fortran is to define a type:

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 中执行此操作的唯一真正原因是语法.我很想在标准的更高版本中看到这个问题.

etc. As far as I can tell, the only real reason you have to do this in Fortran is syntax. I'd love to see this fixed in some later version of the standard.

这篇关于指针数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆