我想解密fortran代碼。它將一個指向函數的指針作爲實際參數傳遞,而形式參數則是一個目標。它定義並在主程序分配型全球國際的指針,然後調用一個函數傳遞一個指針:Fortran函數:指針作爲實際參數和目標爲正式
module dataGLOBAL
type globalDATA
type (gl_1) , pointer :: gl1
type (gd_2) , pointer :: gd2
type (gdt_ok) , pointer :: gdtok
...
...
end type globalDATA
end module dataGLOBAL
Program main
....
....
use dataGLOBAL
...
type(globalDATA),pointer :: GD
allocate(GD)
returnvalue = INIT(GD)
....
....
end
該功能可以讀取:
integer function INIT(GD) result(returnvalue)
....
....
use dataGLOBAL
type(globalDATA) , target :: GD
allocate (GD%gl1)
allocate (GD%gd2)
allocate (GD%gdtok)
....
....
end function INIT
什麼是這樣做的意義何在?爲什麼主程序中的指針和目標結構的單個組件都必須分配? 謝謝 答:
謝謝。現在一切都很清楚! – Lupocci
對於第4點,當虛擬參數和實際參數都是TARGET時:如果僞參數聲明爲具有假定的形狀'a(:)',但如果聲明的是具有顯式大小的聲明,則指針關聯保證在該例程結束時存活'a(5)'或假定的大小'a(*)'[Modern Fortran - Style and Usage](https://books.google.nl/books?id=5Qj2DieTHsYC&lpg=PA69&dq=fortran%20target%20pointer%20scope&pg= PA71#v = onepage q&&F =假) – Frepa