如何使用指针数组在 FORTRAN 中分配不相邻的数组条目

阿德里安·汤普金斯

我希望能够重置不在连续内存块中的数组中的元素。我想为此使用指针数组而不是指针数组,因为我对指针数组的理解是它们必须指向一个连贯的内存块(例如指针(1:10,1:10)=>目标(1 :100) )

我的简单测试程序如下:

program test
  implicit none

  integer, target :: arr(4,4)

  type ptr
    integer, pointer :: p
  end type ptr

  type(ptr), dimension(2) :: idx 

  arr=0

  idx(1)%p=>arr(2,2) 
  idx(2)%p=>arr(4,2)

  idx(1)%p=5 ! this is okay 
  idx(2)%p=5 ! this is okay  
  idx(1:2)%p=5 ! this gives an error

  print *,arr

end program test

前两个语句 idx(n)%p=5 没问题,但我希望能够使用跨越方法 idx(1:n)%p=5 在一个语句中设置一大块数组,但是当我这样做时我收到以下编译错误:

Error: Component to the right of a part reference with nonzero rank must not have the POINTER attribute at (1)

我可以以某种方式使用指针设置一组数组条目的值吗?也许实际上可以使用指针数组而不是指针数组......

我认为这与Fortran相关:使用向量来索引多维数组

但我在这里看不到如何使用该答案。

高性能标志

可能是扩展评论而不是答案,但我需要一些格式...

最好不要考虑 Fortran 支持指针数组。您已经掌握了这一点(我认为)并构建了派生类型数组的通常解决方法,该类型的每个实例都有一个指针元素。

不完全清楚的是为什么不使用多个向量下标,例如

arr([2,4],[2]) = 5

(好吧,第二个下标是一个退化向量,但该语句旨在与您尝试使用指针具有相同的效果。)如果您愿意,您可以使用数组下标三元组代替

arr(2:4:2,2) = 5

也许您已经将您的需求简化得太远,无法表达使用指针的必要性,在这种情况下,我的微弱建议将无法满足您未声明的需求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Fortran中分配字符数组

来自分类Dev

在Fortran子例程中分配数组

来自分类Dev

指针数组fortran

来自分类Dev

指针数组fortran

来自分类Dev

Fortran未分配的数组

来自分类Dev

在Fortran中分配已取消引用的指针

来自分类Dev

Intel Fortran错误“未分配可分配数组或指针”

来自分类Dev

Fortran 2003中的常量函数指针数组

来自分类Dev

包含多个数组的FORTRAN指针

来自分类Dev

FORTRAN:通过指针矩阵访问数组,性能

来自分类Dev

Fortran指向多个目标的指针数组

来自分类Dev

如何在 Fortran 中将指针分配给复杂的 3d 数组

来自分类Dev

fortran中的数组数组

来自分类Dev

数组内的 Fortran 数组

来自分类Dev

使用Fortran减少Openmp数组

来自分类Dev

Fortran填充数组

来自分类Dev

带cshift的fortran数组

来自分类Dev

fortran中的数组操作

来自分类Dev

Fortran填充数组

来自分类Dev

Fortran函数返回可分配数组

来自分类Dev

Fortran PACK的多态数组分配:问题

来自分类Dev

如何使用双指针作为指针数组?

来自分类Dev

如何使用Fortran程序的gdb打印数组大小(绑定)

来自分类Dev

如何使用数组在fortran中定义变量函数

来自分类Dev

如何使用Fortran程序的gdb打印数组大小(绑定)

来自分类Dev

如何在fortran中拆分数组?

来自分类Dev

如何在Fortran子例程中使用可分配数组?

来自分类Dev

屏蔽Fortran数组的更好方法?

来自分类Dev

在Fortran中调用数组函数