swift 指针使用(三)——原始指针

本文介绍如何在Swift中使用UnsafeMutableRawPointer与UnsafeMutablePointer进行内存分配、初始化、读写及释放等操作,并展示了从类型指针到原始指针的转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UnsafeMutableRawPointer用类方法初始化必须指定分配内存大小和对其方式
let count = 3
        
let rawPtr = UnsafeMutableRawPointer.allocate(bytes: MemoryLayout<Int>.stride*count, alignedTo: MemoryLayout<Int>.alignment)//初始化无类型指针
        
let ptr = rawPtr.initializeMemory(as: Int.self, at: 0, count: 2, to: 1)
        //初始化3个Int都是1的实例 返回类型指针 以后释放实例
rawPtr.load(fromByteOffset: 0, as: Int.self)
        //访问第一Int变量 1
ptr.deinitialize(count: 2)
        //释放实例
rawPtr.storeBytes(of: 2, toByteOffset: 0, as: Int.self)
        //指针指向变量2
rawPtr.load(fromByteOffset: 0, as: Int.self)
        // 2
rawPtr.deallocate(bytes: MemoryLayout<Person>.stride*count, alignedTo: MemoryLayout<Person>.alignment)
        //释放指针内存

用storeBytes方法是直接指向变量的原始内存 所以不需要释放变量。

类型指针可以转换成原始指针

        let count = 3
        
        let ptr = UnsafeMutablePointer<Int>.allocate(capacity: count)
        for i in 0..<count{
            ptr[i] = i + 1//赋值 1 2 3
        }
        
        let rawPtr = UnsafeMutableRawPointer(ptr)//转换成原始指针
        for step in stride(from: 0, to: count*MemoryLayout<Int>.stride, by: MemoryLayout<Int>.stride){
            let a = rawPtr.load(fromByteOffset: step, as: Int.self)// 按照字节偏移取值
            print("a===\(a)")// 1 2 3
        }
        ptr.deinitialize(count: count)//释放
        ptr.deallocate(capacity: count)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值