【问题标题】:Turn an array of array of float numbers into UnsafeMutablePointer<UnsafeMutablePointer<Float>>将浮点数数组转换为 UnsafeMutablePointer<UnsafeMutablePointer<Float>>
【发布时间】:2019-12-08 01:49:14
【问题描述】:

我需要使用一个使用UnsafeMutablePointer&lt;UnsafeMutablePointer&lt;Float&gt;?&gt;! 作为参数的函数。它是在 Objective-C++ 框架中编写的,我通过桥接头访问它:

- (void) applyFilters: (float *) input_image input_params: (long *) input_params output_image : (float *) output_image output_params : (long *) output_params filter_id : (int) filter_id args : (float**) args

我无法理解 args 参数的结构,即 float**。在 Swift 中,它要求一个 UnsafeMutablePointer&lt;UnsafeMutablePointer&lt;Float&gt;&gt; 类型的参数,我猜它指向一个浮点数组。

applyFilters(input_image: UnsafeMutablePointer<Float>!UnsafeMutablePointer<Float>!, input_params: UnsafeMutablePointer<Int>!, output_image: UnsafeMutablePointer<Float>!, output_params: UnsafeMutablePointer<Int>!, filter_id: Int32, args: UnsafeMutablePointer<UnsafeMutablePointer<Float>?>!)

如果我创建一个浮点数组,如何使用UnsafeMutablePointer&lt;UnsafeMutablePointer&lt;Float&gt;&gt; 指向它,以便将其传递给 C++ 函数?

【问题讨论】:

标签: ios arrays objective-c swift unsafemutablepointer


【解决方案1】:

想出了怎么做:

func arrayOfArrayExample() {

    let floatArray: [[Float]] = [
        [50.0, 23.0, 15.6],
        [24.0, 9.5, 12.7]
    ]

    let size1 = floatArray.count
    let size2 = floatArray[0].count

    var vectorBuf : UnsafeMutablePointer<Float>?
    let bufferOut = UnsafeMutablePointer< UnsafeMutablePointer<Float>?>.allocate(capacity: Int(size1))

    for i in 0..<size1 {
        vectorBuf = UnsafeMutablePointer<Float>.allocate(capacity: size2)
        for j in 0..<size2 {
            vectorBuf!.advanced(by: j).pointee = floatArray[i][j]
        }
        bufferOut.advanced(by: i).pointee = vectorBuf
    }

    defer {
        //deallocating memory
        for i in 0..<size1 {
            bufferOut.advanced(by: i).deallocate()
        }
    }
}

变量bufferOut返回一个指向浮点数组数组的UnsafeMutablePointer&lt;UnsafeMutablePointer&lt;Float&gt;&gt;指针,然后释放内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 2018-10-21
    相关资源
    最近更新 更多