【发布时间】:2018-01-15 22:27:43
【问题描述】:
我想引用一个二维数组,它的大小在运行时确定,作为一个一维数组,而不复制或改变原始数组。由于 Fortran 使用指向数组的指针而不是指针数组,因此直接使用指针在我尝试过的任何排列中都不起作用。 EQUIVALENCE 似乎只适用于恒定大小的数组,TRANSFER 返回一个副本。一维数组的具体排序并不重要(即[x11,x12,x13...] 与[x11,x21,x31...] 一样好),但是当我对二维数组进行变异时,我希望看到一维数组中反映的变化,反之亦然反之亦然。
理想情况下我可以这样做:
program arr_as_vec
implicit none
real, allocatable, target :: arr(:,:)
real, pointer :: vec(:)
integer :: dim1, dim2 ! would really be determined at runtime
dim1 = 3; dim2 = 5
allocate(arr(dim1,dim2))
call something_like_equivalence(arr, vec)
arr(1,1) = 1
arr(dim1,dim2) = 2
print *, vec(1) ! should give 1
print *, vec(dim1*dim2) ! should give 2
end program arr_as_vec
这可能吗?
【问题讨论】:
-
您可能会发现some of these techniques 很有用。尤其是重新映射。
-
@francescalus 我读到了,但是在使用
ptr(1:n,1:n) => vector时出现错误。不过,我确实想出了办法,但解决方案很简单,我感到很尴尬。 -
@MichaelGreenburg 我以前在您的回答中使用过类似的方法,但现在
vec(1:size(arr)) => arr不起作用吗? (尽管vec => arr给了我一个错误)
标签: fortran