ema*_*cos 5 pointers unsafe-pointers swift unsafemutablepointer
我正在尝试了解Swift中指针的使用,尤其是:Unsafe[Mutable]Pointer和UnsafeRaw[Mutable]Pointer。关于这个问题,我有几个问题。
是UnsafePointer <T>等于const T * Pointer在?和UnsafeMutablePointer <T>等于T * Pointer在C 2
Unsafe[Mutable]Pointer和之间有什么区别UnsafeRaw[Mutable]Pointer?
为什么编译
func receive(pointer: UnsafePointer<Int> ) {
print("param value is: \(pointer.pointee)")
}
var a: Int = 1
receive(pointer: &a) // prints 1
Run Code Online (Sandbox Code Playgroud)
但这给我一个错误?
var a: Int = 1
var pointer: UnsafePointer<Int> = &a // error : Cannot pass immutable value of type 'Int' as inout argument
Run Code Online (Sandbox Code Playgroud)
- 等于
UnsafePointer <T>中const T * Pointer? 并UnsafeMutablePointer <T>等于T * PointerC 中的?
那么,在 Swift 应用程序中使用桥接标头来查看 C 指针是如何桥接的:
const int *myInt;
int *myOtherInt;
Run Code Online (Sandbox Code Playgroud)
桥梁到
var myInt: UnsafePointer<Int32>!
var myOtherInt: UnsafeMutablePointer<Int32>!
Run Code Online (Sandbox Code Playgroud)
Unsafe[Mutable]Pointer和 和有什么区别UnsafeRaw[Mutable]Pointer?
Swift 3 添加了UnsafeRawPointer API来替换Unsafe[Mutable]Pointer<Void>类型。Swift 中不再允许不同类型的指针之间的转换。相反,API 提供接口(.assumingMemoryBound(to:)或.bindMemory(to:capacity:))将内存绑定到类型。
对于问题 3,& 符号表示变量是inout。 我不相信你可以将变量声明为,inout除非它被直接修改底层内存的函数使用,但我会让专家纠正我。相反,使用withUnsafePointer.
感谢 Martin 的有用评论,这种语法在 Swift 中永远无效,并且没有安全的方法来创建指向 Swift 变量的“自由指针”。