4
是否有必要在任何其他代碼之前聲明數組維度?例如,我已經寫了下面的簡單示例代碼:在Fortran 90中,數組維必須事先聲明嗎?
PROGRAM mytest
IMPLICIT NONE
INTEGER :: i, j, k, mysum
! Let array c be a k-by-k**2 array
! Determine k within the program by some means...for example,
mysum=0
DO i=1, 3
mysum=mysum+1
END DO
k=mysum
REAL, DIMENSION(k, k**2) :: c
WRITE(*,*) "k=", k
WRITE(*,*) "k**2=", k**2
WRITE(*,*)
DO i=1,size(c,1)
WRITE(*,"(100(3X,F3.1))") (c(i,j), j=1,size(c,2))
END DO
END PROGRAM mytest
,我想說明的是,我想創建一個數組c
大小爲k
-by- k**2
點,和k
是僅由代碼內的其他計算確定; k
在開始時並不知道。
但是,上面的代碼給了我在編譯時出現以下錯誤信息:
mytest.f90:13.31:
REAL, DIMENSION(k, k**2) :: c
1
Error: Unexpected data declaration statement at (1)
凡在我行代碼13是我終於宣佈c
行:REAL, DIMENSION(k, k**2) :: c
。
在另一方面,如果我不是宣佈k
並指定其尺寸前期,
PROGRAM mytest
IMPLICIT NONE
INTEGER :: i, j, k, mysum
REAL, DIMENSION(3,9) :: c
! Let array c be a k-by-k**2 array
! Determine k within the program by some means...for example,
mysum=0
DO i=1, 3
mysum=mysum+1
END DO
k=mysum
WRITE(*,*) "k=", k
WRITE(*,*) "k**2=", k**2
WRITE(*,*)
DO i=1,size(c,1)
WRITE(*,"(100(3X,F3.1))") (c(i,j), j=1,size(c,2))
END DO
END PROGRAM mytest
我得到正確的輸出:
k= 3
k**2= 9
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
但是,因爲我不知道k
事先,我不能在我的實際代碼中完全做到這一點。是否有某種方法可以在不指定尺寸的情況下初始「聲明」數組c
,然後在知道k
的值時指定尺寸?