可以在 Fortran 中超出其原始范围使用指向子节的指针

Can pointer to subsection be used out of its original bounds in Fortran

做这样的事情是否有效:

real(kind=rk), allocatable, target :: arr(:,:)
real(kind=rk), pointer :: ptr(:,:)

allocate(arr(10, 10))
ptr => arr(5:7, 5:7)

arr = 0
ptr(-1, 4) = 1

例如创建指向数组子部分的指针,然后访问子部分之外但存在于原始数组中的索引?

具有指针属性的数组本身仍然是一个数组,具有自己的边界。尝试访问这些边界之外的数组元素是无效的。

在指针的情况下,这种访问可能 "work" - 程序仍然拥有内存。但是,这是无效的。

从 Fortran 2003 开始​​,可以在指针赋值中使用 bounds-spec

real(kind=rk), allocatable, target :: arr(:,:)
real(kind=rk), pointer :: ptr(:,:)

allocate(arr(10, 10))
ptr(-1:,-1:) => arr(3:8, 3:8) 

arr = 0
ptr(-1, 4) = 1