如何在Fortran中分配c_ptr?

如何在Fortran中分配c_ptr?,fortran,fortran-iso-c-binding,fortran2003,Fortran,Fortran Iso C Binding,Fortran2003,给定一个Fortran派生类型,其字段为c_ptr(来自iso_c_绑定)和该类型的两个变量a和B,赋值a=B是如何定义的?如果指针是fortran指针,那么在赋值过程中它们实际上会被取消引用。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

给定一个Fortran派生类型,其字段为c_ptr(来自iso_c_绑定)和该类型的两个变量a和B,赋值a=B是如何定义的?如果指针是fortran指针,那么在赋值过程中它们实际上会被取消引用。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?

存储在C_PTR派生类型对象中的C地址不会像(顶级)Fortran指针那样被取消引用。右侧对象内的C地址分配给左侧对象

(它更类似于Fortran非多态标量指针赋值。)


从概念上讲,就好像C_PTR类型只有不可分配的、非指针的组件,并且它们是通过内部赋值规则进行赋值的。

如果指向某个C组件的
指针是Fortran指针组件,那么在分配持有该组件的派生类型时,它不会被取消引用。