基本表示法
可以使用 dimension 属性或直接指示数组的 dimension
(s)将任何类型声明为数组:
! One dimensional array with 4 elements
integer, dimension(4) :: foo
! Two dimensional array with 4 rows and 2 columns
real, dimension(4, 2) :: bar
! Three dimensional array
type(mytype), dimension(6, 7, 8) :: myarray
! Same as above without using the dimension keyword
integer::foo2(4)
real::bar2(4, 2)
type(mytype) :: myarray2(6, 7, 8)
后一种声明多维数组的方法允许在一行中声明相同类型的不同级别/维度数组,如下所示
real::pencil(5), plate(3,-2:4), cuboid(0:3,-10:5,6)
Fortran 2008 标准允许的最大等级(维度数)为 15,之前为 7。
Fortran 按列主要顺序存储数组。也就是说,bar
的元素存储在内存中,如下所示:
bar(1, 1), bar(2, 1), bar(3, 1), bar(4, 1), bar(1, 2), bar(2, 2), ...
在 Fortran 中,默认情况下,数组编号从 1 开始,而 C 从 0 开始。事实上,在 Fortran 中,你可以明确指定每个维度的上限和下限:
integer, dimension(7:12, -3:-1) :: geese
这声明了一个形状 (6, 3)
的数组,其第一个元素是 geese(7, -3)
。
内部函数 ubound
和 lbound
可以访问 2(或更多)维度的下限和上限。事实上,lbound(geese,2)
将返回 -3
,而 ubound(geese,1)
将返回 12
。
内部函数 size
可以访问数组的大小。例如,size(geese, dim = 1)
返回第一个维度的大小,即 6。