我想将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
,但我之前已经执行过这种操作(不是用指针),它运行正常。我在这里缺少什么?
答案 0 :(得分:3)
我认为这来自对
的常见误解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
假设'function'是某种3D对象,你可以通过
访问维度N的元素I,j,karr(N)%p(I,j,k)