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包装器使任务变得更加容易. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |