在Fortran中使用序列初始化数组

时间:2017-10-11 21:42:12

标签: arrays fortran translation

我目前正致力于翻译一些遗留的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中是否可以接受? (必须是因为它来自遗留代码) 我误解了这条线的作用吗?

1 个答案:

答案 0 :(得分:4)

语法不正确,并且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

来自https://software.intel.com/en-us/node/678554

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

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

重塑不仅仅是按照您的猜测将1D数组更改为按主要顺序排列的2D数组。