Kie*_*son 5 arrays size fortran dynamic variable-assignment
我在这里有一些测试代码没有像我怀疑的那样.我正在使用gfortran编译器.
program test
implicit none
integer, allocatable, dimension(:) :: a
integer, allocatable, dimension(:) :: b
allocate(a(2))
allocate(b(4))
a = 1
b = 2
write(*,*) a
write(*,*) ' '
write(*,*) b
write(*,*) ' '
write(*,*) 'a size before', size(a)
a = b
a = 1
write(*,*) a
write(*,*) ' '
write(*,*) b
write(*,*) ' '
write(*,*) 'a size after', size(a)
end program test
Run Code Online (Sandbox Code Playgroud)
我得到以下输出.
1 1
2 2 2 2
2之前的大小
1 1 1 1
2 2 2 2
4之后的大小
为什么在分配不同尺寸的数组时没有出错?为什么改变了大小?
这是一项称为分配分配的功能.将数组分配给可分配数组时,会自动调整大小.所以之后a = b,a预计会有大小b.
您可以通过该-Wrealloc-lhs选项告诉编译器警告这一点.
另见这个人的条目:
-frealloc-LHS
如果内部赋值的未分配或具有不同的形状,则会自动(重新)分配内部赋值的可分配左侧.默认情况下启用该选项,除非
-std=f95给出了该选项 .另见-Wrealloc-lhs.
另请参阅相关的博客文章Doctor,当我由Steve Lionel 执行此操作时会受到伤害.
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |