我想将3D数组指针存储到4D数组指针中,但遇到了一些问题。例如:
real,pointer :: p(:,:,:,:) => null()
integer :: ndims,d
ndims = 3
do d=1,ndims
p(d,:,:,:) => function
end do
其中function
是返回诸如p(:,:,:)
之类的指针的函数指针,并且这工作得很好。我得到的错误是Lower bound has to be present
在这一行:p(d,:,:,:) => function
,但我以前执行过这种操作(不使用指针),它运行良好。我在这里错过了什么?
我认为这源于对
real,pointer :: p(:,:,:,:) => null()
实际上是在fortran。
它不是指针的4D数组,而是指向4D数组的指针"p"。
你可以做的是玩一个小把戏,创建一个内部有指针的结构:
type pointer4D
real, pointer :: p
end type pointer4D
type(pointer4D), dimension(:) :: arr
因此,您的代码将变为:
do d=1,ndims
arr(d)%p => function
end do
假设"函数"是某种3D对象,您可以通过访问维度N的元素I,j,k
arr(N)%p(I,j,k)