【发布时间】:2015-10-07 22:03:03
【问题描述】:
背景
我正在尝试使用 ccall Julia 函数来使用用 C 编写的代码。
我知道如何将数组作为参数传递给需要int *arg 的函数。比如尝试使用这个C函数
void sum_one(int *arr, int len)
{
for (int i=0; i<len; i++){
arr[i]++;
}
}
这个 Julia 代码有效
x = collect(Cint, 1:5)
ccall((:sum_one, "/path/to/mylib.so"), Void, (Ptr{Cint}, Cint), x, 5)
问题
对于期望将指向指针 (int **arg) 的指针用作二维矩阵的 C 函数,这似乎并不那么简单。说这个
void fill_matrix(int **arr, int row, int col)
{
for (int i=0; i<row; i++){
for (int j=0; j<col; j++){
arr[i][j] = arr[i][j] + i + j*10;
}
}
}
在这里,我需要创建一个 Array of Arrays 以便 C 代码接受它:
xx = [zeros(Cint, 5) for i in 1:6]
ccall((:fill_matrix, "/path/to/mylib.so"),
Void, (Ptr{Ptr{Cint}}, Cint, Cint), xx, 6,5)
但是这种结构结构从 Julia 方面来说不是很方便。
问题
- 还有其他方法可以将二维矩阵传递给需要
int **arg类型参数的 C 函数吗? - 如果不是,如何将已经存在的 Julia 的二维数组 转换为 C 的 数组数组 结构?
- 反之亦然?
【问题讨论】: