Fortran 中的指针数组操作 - 下限错误

Pointer array operations in Fortran - Lower bound error

我想将 3D 数组指针存储到 4D 数组指针中,但我遇到了一些问题。例如:

real,pointer :: p(:,:,:,:) => null()
integer :: ndims,d

ndims = 3
do d=1,ndims
  p(d,:,:,:) => function
end do

其中 function 是一个函数指针,returns 是一个指针,例如 p(:,:,:),这工作正常。我得到的错误是 Lower bound has to be present 在这一行:p(d,:,:,:) => function,但我之前执行过这种操作(不是使用指针)并且它工作正常。我在这里错过了什么?

我认为这是对

的普遍误解
real,pointer :: p(:,:,:,:) => null() 

其实是用fortran做的。

它不是一个 4 维指针数组,而是一个 'p' 指向 4 维数组的指针。

你可以做的是玩点小把戏,创建一个内部有指针的结构:

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、k
arr(N)%p(I,j,k)