2013-03-06 1 views
0

Учитывая тип производного от Fortran с полем c_ptr (из iso_c_binding) и двумя переменными A и B указанного типа, как определено назначение A = B? Если указатели были указателями fortran, они по сути были бы разыменованы во время назначения. То же самое верно для c_ptr?Как c_ptr назначается в Fortran?

USE, intrinsic :: iso_c_binding 
... 
type all_mine 
    real :: E 
    type(c_ptr) :: ptr_to_some_c 
end type all_mine 
... 
type(all_mine) :: A, B 
... 
A = B ! What happens here? 
+0

Если компонент 'pointer_to_some_c' был компонентом указателя Fortran, то он не будет разыменован, если был назначен производный тип, содержащий компонент. – IanH

ответ

2

: C адрес, сохраненный внутри объекта производного типа C_PTR не разыменовываются как (верхний уровень) Fortran указатель будет. Адрес C внутри объекта правой стороны назначается объекту левой стороны.

(Его больше похожи на Fortran без полиморфного присваивания указателя скаляра.)

Концептуально это как если бы типа C_PTR был только без ALLOCATABLE, компоненты без указателей и они были назначены через по правилам внутреннего назначение.