给定一个Fortran派生类型,其字段是c_ptr(来自iso_c_binding)和两个所述类型的变量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?
答案 0 :(得分:2)
存储在C_PTR派生类型对象中的C地址不会被解除引用为(顶级)Fortran指针。右侧对象内的C地址被分配给左侧对象。
(它更类似于Fortran非多态标量指针赋值。)
从概念上讲,就好像C_PTR类型只有非可分配的非指针组件,并且它们是由内在赋值规则分配的。