【问题标题】:How to make a Fortran c_ptr null?如何使 Fortran c_ptr 为空?
【发布时间】:2015-01-26 10:36:13
【问题描述】:

我有一个类型有两个指针,一个 Fortran 指针和一个 C 指针:

type mytype
  procedure(whatever), pointer, nopass :: fortranPointer
  type(c_ptr) :: cPointer
end type 

我可以为两个指针分配一些东西,例如:

type(mytype) :: instance
instance%fortranPointer => fPtrToSomething
instance%cPointer = c_loc(somethingElse)

当我想初始化指针而不赋值时,我可以使用 null()nullify 作为 Fortran 指针:

instance%fortranPointer => null()

但是如何将c_ptr 初始化为null? instance%cPointer = null() 不起作用,因为在分配的右侧不允许使用 null()c_loc(null()) 不允许,因为null() 不是变量,可以获取到哪个位置。

有类似c_null 的东西吗?

【问题讨论】:

    标签: pointers null fortran fortran-iso-c-binding


    【解决方案1】:

    发现可以使用一个名为常量c_null_ptr内在类型

    【讨论】:

    • 作为一个小修正,c_null_ptr 本身不是一个内在类型,而是一个类型为c_ptr 的命名常量(因此适用于该类型的其他变量的赋值和初始化)。
    • @francescalus 谢谢。不知道这个内部结构。
    • 是否使用指针赋值或普通赋值将 c_ptr 设置为 c_null_ptr?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多