给定1D数组,我想创建一个指向数组边界的指针,比如数组的前2个和后2个元素。我已经对此进行了一些调查,但我遇到的唯一不连续的指针示例是定义为跨步访问的那些。
给出以下测试用例
program test
implicit none
integer, target :: a(10)
integer, pointer :: p(:)
integer :: i
do i=1,10
a(i)=i
end do
p => a(:) ! Point all
p => a(::2) ! Point every 2 elments
print*, p
end program test
如何使用单个指针指向原始数组的分隔数组切片?所以要清楚,在这个例子中打印p
时我想得到1 2 9 10
。
答案 0 :(得分:0)
你不能做一个完全通用的指针。它是数组的重点,它们结构良好,可以按顺序访问。这就是他们必须跨步的原因。
在你的情况下,你仍然有一些结构,所以你可以使用2D数组指向那些对。
这是一个例子。 equivalence
。但是,对于标准Fortran中的未知原因,等效性不能与target
一起使用。
可以使用2D指针p
作为:
integer, pointer :: p(:,:), b(:,:)
b(1:2,1:5) => a
p => b(:,1::4)
但是,就我所见,此处还需要2D指针p
。
你也可以使用C风格的演员阵容进行第一次重新制作,但是可能没用:
type(c_ptr) ptr
ptr = c_loc(a)
call c_f_pointer(ptr, b, [2,5])
p => b(:,1::4)
我找不到使用1D指针的方法。