在Swift中获取指向C结构的指针

时间:2016-06-06 18:07:19

标签: c swift

我正在转换一个用于Swift的C信号处理库。

所以我正在尝试编写测试但是对vsip_vgetattrib_d的调用失败了,因为我没有得到指向attr的指针。

func testAttr(){
    let v = Vector(length: 10, type: "d")
    var attr: vsip_vattr_d
    var attrPtr: UnsafeMutablePointer<vsip_vattr_d> = &attr
    vsip_vgetattrib_d(v.vsip!,attrPtr)
    print(attr)
}

在C中,这看起来像

vsip_vattr_d attr
vsip_vgetattrib_d(v,&attr)

attr将填充正确的值。

注意我有一个解决方法。

以下工作正常

func testAttr(){
    let v = Vector(length: 10, type: "d")
    let attr: vsip_vattr_d = vsip_vattr_d(offset: v.offset, stride: v.stride, length: v.length, block: v.sBlock.vsip)
    //vsip_vgetattrib_d(v.vsip!,attrPtr)
    print(attr)
}

并打印:

  

vsip_vattr_d(偏移量:0,步幅:1,长度:10,块:0x000060000026f740)

但是这个问题会一次又一次地咬我,所以我需要弄清楚如何在需要时将指向C结构的指针作为inout参数传递给我的函数。

1 个答案:

答案 0 :(得分:0)

您可以传递T类型的(已初始化的)变量 inout表达式(&)表达期望UnsafeMutablePointer<T>的函数,所以这应该有效:

func testAttr(){
    let v = Vector(length: 10, type: "d")
    var attr = vsip_vattr_d()
    vsip_vgetattrib_d(v.vsip!, &attr)
    print(attr)
}