【发布时间】:2015-07-27 09:12:02
【问题描述】:
我正在使用 Swig 将 python 与 C 代码接口。
我想调用一个以包含 int** var 的结构为参数的 C 函数:
typedef struct
{
(...)
int** my2Darray;
} myStruct;
void myCFunction( myStruct struct );
我正在努力处理多维数组。
我的代码如下所示:
在接口文件中,我使用的是这样的数组:
%include carrays.i
%array_class( int, intArray );
%array_class( intArray, intArrayArray );
在 python 中,我有:
myStruct = myModule.myStruct()
var = myModule.intArrayArray(28)
for j in range(28):
var1 = myModule.intArray(28)
for i in range(28):
var1[i] = (...) filling var1 (...)
var[j] = var1
myStruct.my2Darray = var
myCFonction( myStruct )
我在myStruct.my2Darray = var 行收到错误:
TypeError: in method 'maStruct_monTableau2D_set', argument 2 of type 'int **'
我怀疑%array_class( intArray, intArrayArray ) 这一行。
我尝试使用 int* 的 typedef 来创建我的数组,如下所示:
%array_class( myTypeDef, intArrayArray );
但这似乎不起作用。
你知道如何在 Swig 中处理多维数组吗?
感谢您的帮助。
【问题讨论】:
-
int** my2Darray实际上既不描述二维数组,也不描述指向数组的指针。它是一个指向int *的指针,并且可能指向这样的一维数组。尽管数组和指针在 C 中密切相关,但它们根本不是一回事。我没有关于如何在 Swig 中处理此问题的建议,但最好从对 C 数据的充分理解开始。
标签: python c arrays multidimensional-array swig