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

时间:2016-07-20 12:11:52

标签: arrays pointers fortran fortran90

我想将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,但我之前已经执行过这种操作(不是用指针),它运行正常。我在这里缺少什么?

1 个答案:

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