Fortran中可变大小数组的定义

本文介绍 Fortran90 中如何利用 allocatable 属性声明动态数组,并通过实例展示如何根据运行时需求分配和释放内存。涵盖 allocatable 的使用方法、配置成功与否的判断及多维数组的声明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ALLOCATABLE


一般在宣告陣列時必須指定大小,但有些問題在執行階段才知道需要多大的陣列,這時經常的解決辦法就是宣告一個足夠大的陣列,並告知使用者操作限制,如:

integer student(100), stu_count

print *,"輸入學生人數(MAX:100)"

read *, stu_count

do i = 1, stu_count

   print *, "請輸入第",i,"位同學成績"

   read *, student(i)

end do

...

Fortran 90則可以透過ALLOCATABLE來解決這個問題:

integer, allocatable :: student(  ! 宣告一個可變大小的一維陣列

integer :: stu_count

print *,"輸入學生人數:"

read *, stu_count

allocate( student(stu_count) )     ! 配置stu_count個記憶體空間

do i = 1, stu_count

   print *, "請輸入第",i,"位同學成績"

   read *, student(i)

end do

...

  • 宣告注意:
    這裡需要 allocatable 和 allocate 兩個指令的配合,allocatable配合陣列宣告時使用,但陣列大小以「:」代替即可;當知道所需陣列大小時,再以 allocate 配置記憶體空間大小。

  • 配置是否成功:
    由於記憶體是有限的,不一定每次都會配置成功,如何得知是否配置成功?可寫成 
    allocate( student(stu_count), stat=error ) ,error是宣告好的整數變數,若成功,error傳為 0 ,其他數值表示失敗。

  • 解除配置空間:
    當該空間使用完畢,也可以透過 deallocate 指令來釋放配置空間:

    如:deallocate( student )

    完整的語法如下:

    DEALLOCATE ( object [, object] ...[, STAT=sv] )

    • object:
      Is a structure component or the name of a variable, and must be a pointer or allocatable array.

    • sv:
      Is a scalar integer variable in which the status of the deallocation is stored.

  • 多維陣列:

    integer, allocatable :: stu_2(:,    ! 兩個冒號代表二維陣列

    integer, allocatable :: stu_3(:,:,  ! 三個冒號代表三維陣列

    allocate( stu_2(3,3) )

    allocate( stu_2(4,4,4) )

  • 指定索引座標範圍:

    integer, allocatable :: stu_1(

    integer, allocatable :: stu_2(:,    ! 兩個冒號代表二維陣列

    allocate( stu_1(-3:3) )

    allocate( stu_2(-3:3,0:5) )

  • 引自輔仁大學  技士及兼任講師林其盛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值