Как назначается c_ptr в Фортране?

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

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?

person Richard Lozes    schedule 06.03.2013    source источник
comment
Если компонент pointer_to_some_c был компонентом указателя Фортрана, то он не будет разыменован при назначении производного типа, содержащего компонент.   -  person IanH    schedule 06.03.2013


Ответы (1)


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

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

Концептуально это похоже на то, как если бы тип C_PTR имел только нераспределяемые компоненты, не являющиеся указателями, и они были бы назначены по правилам внутреннего присваивания.

person IanH    schedule 06.03.2013