fortran 以動態數組爲函數參數

    fortran的傳參是我見過的各種編程語言中最麻煩的一個。它完全不認識傳進來的參數是什麼,必須在函數體內把形參再定義一遍。如果函數參數是數組,尤其是高維數組,那就必須要同時定義數組的數據類型和元素個數。之前都是得過且過的用全局變量common塊矇混過關,都是祖師們從fortran77年代遺留下來的老程序了,全局變量到處都是,程序可讀性很差。現在程序越來越大,不同領域內的程序也要融合在一起,全局變量的劣勢越來越明顯。好在fortran95部分引入了面向對象的概念,一定程度上做到了良好封裝,全局變量也不再必須了。

     數組作函數參數,必須在函數體內製定數組大小。之前的老fortran可以用*號代替下標,但是隻能應用在數組最後一維。如果有一個矩陣行數列數事先都不知道,這種方法就不行了。fortran95引入module之後,要實現動態數組做函數參數就簡單多了。樣例代碼如下:

module mytest

contains

subroutine test(ps)

integer,dimension(:,:)::Ps;

integer ::p;

p=size(ps);

write(*,*)p;

write(*,*) ps(1,1),ps(1,2),ps(2,1),ps(2,2)

end subroutine

end module


program farray

!real(kind(le0)):: s;

use mytest

!integer,allocatable,dimension(:)::s;

!allocate(s(10));

integer ,dimension(2,2)::arr;

arr(1,1) = 1.5

arr(1,2) = 2.5

arr(2,1) = 3.5

arr(2,2) = 4.5

write(*,*) arr(1,1),arr(1,2),arr(2,1),arr(2,2)

call test(arr);

end program farray


這個樣例是在programfan上抄來的,CVF,IVF,gfortran等主流編譯器都支持。注意必須要把sub寫在module裏面,只有module內的sub和function才支持這種寫法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章