Pointers 在fortran中是否可以使用匿名数组?

Pointers 在fortran中是否可以使用匿名数组?,pointers,fortran,anonymous-types,anonymous,Pointers,Fortran,Anonymous Types,Anonymous,我正在尝试用Fortran创建一个数组数组 类似于下面的内容 TYPE :: array_of_arrays REAL, DIMENSION(:), POINTER :: p => NULL() END TYPE TYPE(array_of_arrays), DIMENSION(2) :: some_array 因此,我可以: REAL, DIMENSION(3), TARGET :: some_vector1 = (/1.0, 2.1, 4.3/) REAL, DIMENSIO

我正在尝试用Fortran创建一个数组数组

类似于下面的内容

TYPE :: array_of_arrays
   REAL, DIMENSION(:), POINTER :: p => NULL()
END TYPE

TYPE(array_of_arrays), DIMENSION(2) :: some_array
因此,我可以:

REAL, DIMENSION(3), TARGET :: some_vector1 = (/1.0, 2.1, 4.3/)
REAL, DIMENSION(3), TARGET :: some_vector2 = (/3.0, 1.2, 9.6/)

some_array(1)%p => some_vector1
some_array(2)%p => some_vector2

WRITE(*,*) some_array(1)%p ! I see some_vector1
WRITE(*,*) some_array(2)%p ! I see some_vector2
现在对我来说,实际声明这些
some\u vector
数组中的每一个都对应于数组数组中的每个元素是很麻烦的

我想做的是在一个单独的子例程中设置一个临时向量作为目标,该子例程设置我的数组数组以指向该临时向量

这样我就可以拥有匿名数组

然而,这似乎不起作用,我想知道我是否正在做Fortran不支持的事情


那么Fortran是否支持匿名数组,即(如果我的术语有误)只能通过引用访问的数组;正如IanH所建议的,您可以让指针直接引用分配的内存,而不是引用变量;这是为数不多的分配内存在超出范围后不会自动释放的情况之一

例如

运行它会给

$ gfortran -o arrays arrays.f90 
$ ./arrays 
   1.0000000    
   1.0000000       2.0000000       3.0000000       4.0000000       5.0000000    

当然;正如IanH所建议的,您可以让指针直接引用分配的内存,而不是引用变量;这是为数不多的分配内存在超出范围后不会自动释放的情况之一

例如

运行它会给

$ gfortran -o arrays arrays.f90 
$ ./arrays 
   1.0000000    
   1.0000000       2.0000000       3.0000000       4.0000000       5.0000000    

我不明白。大胆猜测,您的单独子例程可以分配指针组件,使它们指向“临时”存储。您需要考虑该临时存储的生存期。也许显示“似乎不起作用”的代码。我不明白。大胆猜测,您的单独子例程可以分配指针组件,使它们指向“临时”存储。您需要考虑该临时存储的生存期。可能会显示“似乎不起作用”的代码。是的。成功了。我不知道分配指针是我想要的。我只认为allocate子例程是用于可分配数组的,但这现在是有意义的。不明显的是,相同的语法应该用于两个概念上(在语言中)不同的操作,但这就是…是的。成功了。我不知道分配指针是我想要的。我只认为allocate子例程是用于可分配数组的,但这现在是有意义的。不明显的是,相同的语法应该用于两个概念上(在语言中)不同的操作,但它是。。。