指向子节的指针可以在Fortran中使用其原始边界

时间:2018-04-20 06:22:54

标签: arrays pointers fortran sub-array

执行以下操作是否有效:

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

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

2 个答案:

答案 0 :(得分:1)

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

在指针的情况下,这样的访问可以"工作" - 该程序仍然拥有内存。但这是无效的。

答案 1 :(得分:0)

自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