可分配数组
具有 ALLOCATABLE 属性的延迟形状数组称为可分配数组。 当您执行以下任务之一时,将确定数组的边界和形状:
- 使用 ALLOCATE 语句分配存储器
- 执行参数关联
示例
以下示例声明可分配数组并确定其边界。
INTEGER, ALLOCATABLE, DIMENSION(:, :, :) :: arr
ALLOCATE(arr(10, -4:5, 20)) ! Bounds of arr are now defined (1:10, -4:5, 1:20)
DEALLOCATE(a)
ALLOCATE(arr(5, 5, 5)) ! Change the bounds of arr
如果使用 -qinitalloc 编译程序,那么可分配数组 arr 的所有元素都初始化为零。
Migration Tip:
如果您在编译时不知道数组的大小,则可以通过使数组可分配而不是用最大大小声明它来避免不必要的内存使用。
FORTRAN 77 源代码
INTEGER A(1000),B(1000),C(1000)
C 1000 is the maximum size
WRITE (6,*) "Enter the size of the arrays:"
READ (5,*) N
⋮
DO I=1,N
A(I)=B(I)+C(I)
END DO
ENDFortran 90 或更高版本的源代码:
INTEGER, ALLOCATABLE, DIMENSION(:) :: A,B,C
WRITE (6,*) "Enter the size of the arrays:"
READ (5,*) N
ALLOCATE (A(N),B(N),C(N))
⋮
A=B+C
END