加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift定义c中定义的struct的双指针

发布时间:2020-12-14 04:40:51 所属栏目:百科 来源:网络整理
导读:我有一个包含此功能的库: void create_pointer(Pointer **pointer); 它需要一个指针指针并为其分配内存.在c中,我可以这样做 Pointer *pointer;create_pointer(pointer); 然后我有一个指针的实例. 但现在我想在Swift中使用这个功能.怎么样? 我没有关于Point
我有一个包含此功能的库:

void create_pointer(Pointer **pointer);

它需要一个指针指针并为其分配内存.在c中,我可以这样做

Pointer *pointer;
create_pointer(&pointer);

然后我有一个指针的实例.

但现在我想在Swift中使用这个功能.怎么样?

我没有关于Pointer的细节,我只知道它是一个结构,定义如下

typedef struct Pointer Pointer;

解决方法

让我们从C示例开始

typedef struct {
    NSUInteger someNumber;
} SomeStruct;

void create_some_struct(SomeStruct **someStruct) {
    *someStruct = malloc(sizeof(SomeStruct));
    (*someStruct)->someNumber = 20;
}

在C中,你会像这样使用它:

//pointer to our struct,initially empty
SomeStruct *s = NULL;  

//calling the function
create_some_struct(&s);

在Swift中:

//declaring a pointer is simple
var s: UnsafePointer<SomeStruct> = UnsafePointer<SomeStruct>.null()

//well,this seems to be almost the same thing :)
create_some_struct(&s)

println("Number: (s.memory.someNumber)"); //prints 20

编辑:

如果指针是不透明类型(例如void *),则必须使用

var pointer: COpaquePointer = COpaquePointer.null()

请注意,Swift并非旨在轻松地与C代码交互. C代码大多不安全,Swift是为安全而设计的,这就是为什么Swift代码编写有点复杂的原因. C库的Obj-C包装器使任务变得更加容易.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读