Swift——指针

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值