0

给定一个 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?
4

1 回答 1

2

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

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

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

于 2013-03-06T01:59:06.040 回答