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)
我想将 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、karr(N)%p(I,j,k)