声明时, 只能使用 常数来赋值数组的大小。
但数组的索引值就可以使用常量或者变量。
声明数组的方法
integer a(10)
integer , dimension(10) :: a
integer a
dimension a(10)
上面是三种声明数组的方法。都一样。
二维数组的声明
integer a(3,4)
声明二维数组也有很多种方法,如上面的方法一样,只是把括号里,用逗号分开,写几个数就可以。
Fortran最高可声明高达7维的数组。
数组的索引值都是从1开始的。 这可许多语言不太一样。 像C,Java等许多语言都是从0开始的。
但这是默认情况。 Fortran中可以声明 索引值的规则。 如果想从0开始,要这样声明
integer a(0:5)
或者,改成多少都行
integer a(-5:0)
多维数组也可以这样声明
integer a(-3:3, -5,5)
数组赋值
赋初值:data 命令
integer a(5)
data a /1,2,3,4,5/
还可以使用星号 * 来表示重复,如
integer a(5)
data a /5 * 3/
还有一种隐含式的循环
integer a(5)
integer i
data(a(i), i=2,4) /3,4,5/
结果是 a(2)=3, a(3)=4, a(4)=5, a(1),a(5)没有赋值
这种隐式循环在write时候也可以使用。
隐式循环还可以嵌套,来给多维数组赋值。 不容易理解。
Fortran 90中可以省略 data
integer :: a(5) = (/1,2,3,4,5/)
括号跟除号之间不能有空格。
对于部分数组的操作
有点类似于 Python的 用法。
a(3:5)=5
a(3:) = 4 把3之后的都设置成5
Fortran 的 数组保存规则 和 C语言正好相反。
是Column Major的。
CUP的高速缓存。CUP向主存储器拿数据时,会把邻近的几笔数据也拿回来,放在cache中
动态申请内存, 可变大小的数组。
program main
integer , allocatable :: a(:)
integer i
allocate(a(9))
do i=1,9
a(i) = i*i
end do
write(*,*) a
deallocate(a)
end