美文网首页
Swift 获取指针的内存地址

Swift 获取指针的内存地址

作者: topws1 | 来源:发表于2021-10-14 16:17 被阅读0次

前言:

Swift 是一个类型安全(type safe)的语言,编码的过程中类型都是确定的,所以Swift 并不推荐大家直接使用指针。

但是某一些场景下,使用指针是非常便捷的。比如链表中的多个结点的Value是相同的,如果想要对结点标识唯一,可以通过结点的next 指针获取到对应的内存地址,把内存地址当做唯一标识。

Swift 指针操作

获取一个结构体对应的内存地址:

let struct = xxx
var memoryPointer: Int64 = 0
withUnsafePointer(to: & struct) { ptr in
                memoryPointer = unsafeBitCast(ptr.pointee, to: Int64.self)
}

相关知识点

Swift 对于指针相关的操作提供了多种结构体方便使用,常见的比如UnsafePointerUnsafeMutablePointer,他们的区分可以简单的理解为可变与不可变。
详细的使用以UnsafePointer 举例:
我们可以使用UnsafePointer 类型的实例来访问一个内存中的特定类型,这个特定的类型就是指针的 Pointee类型。同时,Swift也支持暂时或永久的转换UnsafePointer 中的Pointee类型。

  • 临时访问一个指针的内存作为一个不同的类型:
let uint8Pointer: UnsafePointer<UInt8> = fetchEightBytes()
let length = uint8Pointer.withMemoryRebound(to: Int8.self, capacity: 8)
  • 永久的重新绑定到不同类型,首先获取指向内存的原始指针,然后调用原指针的bindMemory(to:capacity:)方法。
/// 注意:将`uint8Pointer`引用的内存重新绑定到`UInt64`后,
/// 作为`UInt8`实例访问该指针的引用内存是不明确的。
/// var fullInteger = uint64Pointer.pointee // OK
/// var firstByte = uint8Pointer.pointee // undefined
uint64Pointer = UnsafeRawPointer(uint8Pointer).bindMemory(to: UInt64.self, capacity: 1)

此外,还有一种方法能够读取不同的指针类型。首先把指针转为UnsafeRawPointer,然后通过load方法得到不同的类型:

let rawPointer = UnsafeRawPointer(uint64Pointer)
let fullInteger = rawPointer.load(as: UInt64.self)
let firstByte = rawPointer.load(as: UInt8.self)

相关文章

  • Swift 获取指针的内存地址

    前言: Swift 是一个类型安全(type safe)的语言,编码的过程中类型都是确定的,所以Swift 并不推...

  • 05. Go极简教程 几句话说明白指针

    总结 指针对象是用来存储内存地址的数据类型 &符号获取对象的内存地址 *符号根据内存地址获取值, 只有指针对象可以...

  • Go-Pointer

    go 指针 声明指针类型 x 错误写法此时创建的是一个空指针,而空指针无法获取到内存地址,也就无法根据内存地址找到...

  • 内存对齐

    8字节:指针大小、对象、属性 首先打印出对象获取内存地址: 然后打印内存地址:用x打印内存地址 然后打印内存地址:...

  • c++快速入门6:指针与引用

    了解数据存储 address.cpp 用指针获取数值 指针存储其他变量的内存地址的变量。指针变量的声明方式与其他变...

  • C语言指针

    指针的定义 指针的本质就是内存地址; 指针变量存储的是指针,也就是存储内存地址的变量; 在计算机世界中,内存地址其...

  • C语言特性(指针)

    指针 指针的概念 简单来说,变量的内存地址就是该变量的指针;而用于保存内存地址(指针)的变量就是指针变量 指针变量...

  • swift底层探索 06 - 指针简单使用

    如果在 中需要获取 ,直接使用 都是无法获取地址的,只能 后才可以获取,如图一。 指针 Swift的指针分类两类:...

  • iOS指针

    OC中的内存地址:一:指针变量自己所在的内存地址(指针变量也是变量,也有内存地址)二:指针变量所指向的内容的内存地...

  • 2.7-C语言入门-指针

    1.指针的含义-变量的地址 a.指针:C语言中用“指针”来表示内存地址(即:指针指向了内存地址),即“指针”可理解...

网友评论

      本文标题:Swift 获取指针的内存地址

      本文链接:https://www.haomeiwen.com/subject/iohuoltx.html