Swift 原始指针

UnsafePointer

常量, 原始指针 (C表达法 Type const*)

UnsafePointer<U>

原始指针 (C表达法 Type *)

UnsafeMutablePointer<U>

初始化

init()

init(Void)

init(COpaquePointer)

init(UnsafePointer<U>)

init(UnsafeMutablePointer<U>)

init(Int)

init(UInt)

提示 public typealias Void = ()

var debugDescription: String { get }

打印内存地址

static alloc(Int) ->UnsafeMutablePointer< U>

开辟, 以模版类型为单位的, 以参数Int为数量 的内存空间

提示 @warn_unused_result 未绑定的返回值予以警告

initialize(U)

初始化

move() ->U

交出所有权

提示 @warn_unused_result 未绑定的返回值予以警告

destroy()

destroy(Int)

销毁对象

dealloc(Int)

销毁开辟的内存空间

subscript (Int) -> U { get nonmutating set }

下标

unsafeBitCast

指针强制转换

提示 @warn_unused_result 未绑定的返回值予以警告

C Code

void * getDisplayBaseAddress() {return (void*)0xB8000000;}

Swift Code

@asmname("getDisplayBaseAddress")
func c_getDisplayBaseAddress() ->UnsafeMutablePointer<Void>

var a :UnsafeMutablePointer<Void> = c_getDisplayBaseAddress()

var b :UnsafeMutablePointer<Int32> = unsafeBitCast(a, UnsafeMutablePointer<Int32>.self)

withUnsafePointer

对变量的指针操作

C Code
void function(long long int const* a){}

Swift Code
@asmname(“function”) func c_function(b :UnsafePointer< Int64>) ->Void
var a :Int64 = 10000

withUnsafePointer(&a, {
(b :UnasfeMutablePointer< Int64>) ->Void in

})


UnsafeBufferPointer

常量, 内存连续的原始指针

UnsafeBufferPointer<>

内存连续的原始指针

UnsafeMutableBufferPointer<>


COpaquePointer

不确定类型的原始指针

COpaquePointer


AutoreleasingUnsafeMutablePointer<>


ManagedBufferPointer<>


关于Swift 调用 C语言

Objective-C 桥接文件 stol-Bridging-Header.h

#import "a.h"

C 头文件 a.h

void * getDisplayBaseAddress();

C 源文件 a.c

#include "a.h"

void * getDisplayBaseAddress() {return (void*)0xB8000000;}

Swift 文件 main.swift

var p :UnsafeMutablePointer<Void> = getDisplayBaseAddress()

var p2 = unsafeBitCast(p, Int.self)

print("0x\(String(p2, radix: 16))")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值