在Python中创建2D c_types数组并在C函数中使用它

时间:2019-10-27 21:51:53

标签: python c arrays ctypes

我在Google上进行了搜索,但找不到解决方案。我只想创建一个2D指针数组,该数组引用现有的python数组,以便通过c_types在C函数中发送它。

tab是一个现有的一维数组,它可以正常工作:

arr = (c_int * 1000000)(*tab)
Basic.Basic_c.quicksort.restype = POINTER(c_int )
c = Basic.Basic_c.quicksort(arr)

具有2D阵列:

Matrix = [[0 for x in range(8)] for y in range(5)];
arr = ((c_int * 8)*5)(*Matrix)

那行不通,创建一个错误:

TypeError: expected c_long_Array_8 instance, got list

我找不到解决方法。

1 个答案:

答案 0 :(得分:2)

可以使用元组的元组代替使用2d列表。因此,在创建矩阵后,将其转换为如下所示的元组。

Matrix = [[0 for x in range(8)] for y in range(5)];
Matrix = tuple(map(tuple, Matrix))
arr = ((c_int * 8)*5)(*Matrix)