首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建UnsafeMutablePointer<UnsafeMutablePointer<UnsafeMutablePointer<Int8>>>

如何创建UnsafeMutablePointer<UnsafeMutablePointer<UnsafeMutablePointer<Int8>>>
EN

Stack Overflow用户
提问于 2015-09-21 13:14:47
回答 1查看 14K关注 0票数 9

我正在使用来自Swift的C API,对于我需要调用的方法之一,我需要给出一个

代码语言:javascript
复制
UnsafeMutablePointer<UnsafeMutablePointer<UnsafeMutablePointer<Int8>>>

更多信息:

Swift接口

代码语言:javascript
复制
public func presage_predict(prsg: presage_t, _ result: UnsafeMutablePointer<UnsafeMutablePointer<UnsafeMutablePointer<Int8>>>) -> presage_error_code_t

原文C:

代码语言:javascript
复制
presage_error_code_t presage_predict(presage_t prsg, char*** result);
EN

回答 1

Stack Overflow用户

发布于 2015-09-21 15:26:04

可能有一种更好的方法,但它在游乐场中运行,并用您想要的类型定义一个值r

代码语言:javascript
复制
func ptrFromAddress<T>(p:UnsafeMutablePointer<T>) -> UnsafeMutablePointer<T>
{
   return p
}

var myInt:Int8 = 0
var p = ptrFromAddress(&myInt)
var q = ptrFromAddress(&p)
var r = ptrFromAddress(&q)

定义ptrFromAddress有什么意义,它似乎什么也做不了?我的想法是,Swift互操作书中讨论可变指针的部分展示了通过将某个表达式作为参数传递来初始化它们的许多方法(如&x),但似乎没有展示相应的方法,您可以简单地调用UnsafeMutablePointer的初始化器。

更新:

虽然我相信上面的方法是正确的,但@alisoftware在另一个论坛中指出,这似乎是一种更安全、更地道的方式来做同样的事情:

代码语言:javascript
复制
var myInt: Int8 = 0
withUnsafeMutablePointer(&myInt) { (var p) in
  withUnsafeMutablePointer(&p) { (var pp) in
    withUnsafeMutablePointer(&pp) { (var ppp) in
      // Do stuff with ppp which is a UnsafeMutablePointer<UnsafeMutablePointer<UnsafeMutablePointer<Int8>>>
    }
  }
}

它更惯用,因为您使用的是由Swift标准库提供的函数withUnsafeMutablePointer,而不是定义自己的帮助器。这样更安全,因为您可以保证UnsafeMutablePointer只在调用闭包的过程中是活动的(只要闭包本身不存储指针)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32687808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档