用 Fortran 中的序列初始化数组

Initilalising an array with a sequence in Fortran

我目前正在翻译一些遗留的 Fortran 代码,但我很难理解代码中的特定行。编译器似乎也发现这一行很奇怪并抛出错误。据我了解,它试图通过以 1 为增量对 1 到 9 进行排序来初始化数组,并用列主要形式的此序列填充数组矩阵。

program arrayProg

  integer :: matrix(3,3), i , j !two dimensional real array

  matrix = reshape((/1:9:1/), (/3,3/))

end program arrayProg

这种语法在 fortran 中可以接受吗? (一定是因为它来自遗留代码) 我是不是误解了这条线的作用?

语法不正确,此类代码不能由 Fortran 编译器编译,除非它实现了一些非标准扩展。

英特尔 Fortran 接受此:

 A colon-separated triplet (instead of an implied-DO loop) to specify a range of values and a stride; for example, the following two array constructors are equivalent:
1       INTEGER D(3)
2       D = (/1:5:2/)              ! Triplet form - also [1:5:2]
3       D = (/(I, I=1, 5, 2)/)     ! implied-DO loop form

来自 Development Reference Guides:Array Constructors

(注意:英特尔文档中的 link 经常更改,如果 link 已失效,请在评论中通知我并尝试搜索“triplet form”和“array constructors” )

要以标准方式生成序列,可以使用隐含的 do 循环,例如

 (/ (i, i=1,9) /)

reshape 然后只是将 1D 数组更改为 2D 数组,如您猜测的那样按列主顺序排列。