mil*_*cic 29 arrays fortran pointers fortran90
我正在尝试实现一个指针数组,以便我可以遍历元素.但是我不确定如何正确地做到这一点:
TYPE(domain),POINTER :: d01,d02,d03
TYPE(domain),DIMENSION(:),POINTER :: dom
...
dom(1) => d01
dom(2) => d02
dom(3) => d03
...
Run Code Online (Sandbox Code Playgroud)
然后:
...
IF(ASSOCIATED(dom(2),d02))THEN
...
Run Code Online (Sandbox Code Playgroud)
编译器(x86-64 Linux -tp istanbul-64上的pgf90 10.6-0 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
Run Code Online (Sandbox Code Playgroud)
据我所知,如何对指针数组进行子集化是有问题的.两个dom(2)和d02是秩0(标量指针).实现这个的正确方法是什么?
谢谢.
Jon*_*rsi 64
是的,指针数组在Fortran中很有趣.
问题是这个:
TYPE(domain),DIMENSION(:),POINTER :: dom
Run Code Online (Sandbox Code Playgroud)
没有像你想象的那样定义一个指针数组,而是一个指向数组的指针.你可以在Fortran中使用这些东西做很多很酷的事情 - 指向大型数组的片段,即使是跨步 - 但它绝对是指向数组的指针,而不是指针数组.
在Fortran中获取指针数组的唯一方法是定义一个类型:
type domainptr
type(domain), pointer :: p
end type mytype
type(domainptr), dimension(3) :: dom
dom(1)%p => d01
dom(2)%p => d02
dom(3)%p => d03
Run Code Online (Sandbox Code Playgroud)
据我所知,在Fortran中你必须这样做的唯一真正原因是语法.我很乐意在标准的后续版本中看到这个问题.
| 归档时间: |
|
| 查看次数: |
6184 次 |
| 最近记录: |