Я пытаюсь расшифровать код fortran. Он передает указатель на функцию как фактический аргумент, а формальный аргумент - цель. Он определяет и выделяет указатель типа GlobalData в основной программе, то она вызывает функцию передачи этого указателя:Функция 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 - стиль и использование] (https://books.google.nl/books?id=5Qj2DieTHsYC&lpg=PA69&dq=fortran%20target%20pointer%20scope&pg= PA71 # v = OnePage & д & е = ложь) – Frepa