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