2013-04-12 110 views
2

是否可以在子程序中分配常用數組的大小和值,然後從程序的其他子程序中使用它?Fortran公共變量,可分配數組

下面的程序不能正常工作,但我想要做這樣的事情:

main.f

program main 

integer n 
integer, allocatable :: co(:) 

common n, co 

call assign 

print *, co(1), co(2) 

deallocate(co) 
stop 
end program main 

assign.f

subroutine assign 

integer n 
integer, allocatable :: co(:) 

common n, co 

n = 2 
allocate(co(n)) 

co(1) = 1 
co(2) = 2 

return 
end subroutine assign 
+0

最好忘記'common','block data'和'equivalence'。至少對初學者來說。 –

回答

4

號你可以把指向常見的指針,但不是可分配的。

原因是common的一個基本概念是存儲關聯,在這個關聯中你可以創建一個公共的所有事物的連續序列,然後這些序列在範圍內共享。 Allocatables的大小可以在一個範圍內動態變化,這會使得在可分配之後出現的公共塊中的事物序列中的跟蹤變得相當困難。 (可分配的典型實現意味着與可分配對象直接相關的存儲只是一個描述符 - 實際的數據保存在其他地方,這實際上破壞了連續的存儲單元序列的概念,因爲分配狀態(如記錄在描述符中),數據都是可分配值的一部分,指針的實現類似,但從概念上講,內存中其他位置的數據不是指針值的一部分,所以它不應該是預計將出現在通用描述的連續序列中 - 指針在序列中,但不是它指向的序列。)

Allocatables需要F90。這意味着您可以使用模塊變量 - 這比使用通用的全局數據更好。如果你必須使用普通的方法來做這個,那麼使用一個數據指針。