Swift——指针

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:37   1815   0

Swift中也有专门的指针类型,这些都被定性为"Unsafe"(不安全的)

MemoryLayout 获取数据类型占用内存的大小

 enum MemoryLayout<T> {
     static var size: Int { get }      // 实际占用的内存大小
     static var stride: Int { get }    // 分配的内存大小
     static var alignment: Int { get } // 内存对齐参数
     static func size(ofValue value: T) -> Int
     static func stride(ofValue value: T) -> Int
     static func alignment(ofValue value: T) -> Int
     static func offset(of key: PartialKeyPath<T>) -> Int?
}

UnsafePointer 类似于 const Pointee*

UnsafeMutablePointer 类似于 Pointee*

UnsafeRawPointer 类似于 const void*

UnsafeMutableRawPointer 类似于 void*

var age = 10
func test1(_ ptr: UnsafeMutablePointer<Int>){
    print(ptr)
    ptr.pointee += 10
}

func test2(_ ptr:UnsafePointer<Int>){
    print(ptr.pointee)
}
test1(&age)
print(age)
test2(&age)

func test3(_ ptr:UnsafeMutableRawPointer)
{
    ptr.storeBytes(of: 50, as: Int.self)
}

func test4(_ ptr: UnsafeRawPointer){
    print(ptr.load(as: Int.self))
}

test3(&age)
print(age)
test4(&age)
//获取指向某个变量的指针
var age1 = 11
var ptr1 = withUnsafeMutablePointer(to: &age1){ $0 }
print(ptr1)
var ptr2 = withUnsafePointer(to: &age1){ $0 }
print(ptr2)
ptr1.pointee = 20
print(age1) //20

var ptr3 = withUnsafeMutablePointer(to: &age1){UnsafeMutableRawPointer($0)}
var ptr4 = withUnsafePointer(to: &age1){UnsafeRawPointer($0)}
ptr3.storeBytes(of: 30, as: Int.self)
print(ptr4.load(as: Int.self))
print(age1)
print("--------")

//获得指向堆空间实例的指针
class Person{
    var name = "哈哈"
}

print("Persion")
var person = Person()
var personPtr = withUnsafePointer(to: &person){ UnsafeRawPointer($0) }
print(personPtr)
var heapPtr = UnsafeRawPointer(bitPattern: personPtr.load(as: UInt.self))
print(heapPtr!)

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP