从Swift调用2D C数组[关闭]

问题描述 投票:-2回答:1

我有一个在2D数组上运行的C函数。

我想与Swift中的这个C函数进行交互。

我试试;但是,我收到了一个错误。我正在粘贴相关代码。

谢谢!

///// C Code

#include "test.h"

void test(int N, int J, double arr[J][N], double arr2[J][N]) {
    for (int i = 0; i < N; i++) {
        arr2[J][i] = arr[J][i];
    }
}

///// C Header

#include <stdio.h>

  void test(
         int N, int J, double arr[J][N], double arr2[J][N]);


  ///// Call from Swift

  let a = [[1.0, 2.0, 3.0], [1.0, 2.0, 3.0]]
 let arr = UnsafeMutablePointer<Any>.allocate(capacity: 1)
  arr.initialize(to: a) // intialize with a value
  let arrs = OpaquePointer(arr)


  let a2 = [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]
  let arr2 = UnsafeMutablePointer<Any>.allocate(capacity: 1)
  arr2.initialize(to: a2) // intialize with a value
 let arrs2 = OpaquePointer(arr2)

 let j = a.count

  let n = a[0].count

  test (Int32(n), Int32(j), arrs, arrs2)

 let yiii = UnsafeMutablePointer<Any>(arrs2)

let yii = Array(UnsafeBufferPointer(start: yiii, count: n))

 print(yii) // Trying to get values (ans)

 // Throws error: 

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0xfffffffffffffff8)

c arrays swift pointers
1个回答
1
投票

总结一下:Swift没有等效的C n维数组。您可以创建嵌套的数组数组,但如果您的目标是操作映射到C风格的2D数组的共享内存结构,则必须创建一个映射到内存缓冲区的一维数组,并自己进行索引数学运算。

或者,您可以将C / Objective-C代码与Swift程序链接,并将代码保留在C.

© www.soinside.com 2019 - 2024. All rights reserved.