Ptr

Ptr{T}指向T类型的地址(不保证地址可用、那里有所需数据)

  • Ptr{T}()返回T类型空指针,特别地,T为Nothing(别名Cvoid)时此值为C_NULL,即C的NULL,C++11的nullptr
  • pointer_from_objref(x)指向x的指针(x应为可变的)(注意:julia有垃圾回收机制,应手动销毁指针)
  • pointer(array [,index])获取数组某索引的指针(注意同上)
  • unsafe_pointer_to_objref(p::Ptr)获取p指向的元素,不安全

Ref

Ref{T}一个安全引用T类型数据的对象。这种类型保证指向有效的、由julia分配的内存正确的类型。底层数据受到保护,垃圾收集器不会释放。

  • Ref对象用[]加载或存储
  • 创建一个类型为T的值x的Ref通常写成Ref(x)
  • 创建内部指针到容器(如Array),可以写Ref(a,i)来引用a的第i个元素
  • Ref{T}()创建对T类型值的引用而不初始化,此时引用是未定义的(抛出UndefRefError异常)
  • isassigned(ref::RefValue)检查ref是否未定义
  • 当作为调用ccall参数传递时,Ref对象将被转换为指向它引用的数据
    • 对于大多数T,或者当转换为Ptr{Cvoid}时,这是一个指向对象数据的指针
    • T是isbits(纯数据)类型,则该值可以安全地发生突变,否则突变是严格未定义行为
    • 特殊情况:当T为Any时,将创建指向引用本身的指针Ptr{Any}