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}
)
- 对于大多数T,或者当转换为