最近我正在做一个函数被大量调用的项目,所以我想在这部分使用 C 代码。我是ctypes的新手,如果我的问题很简单,请原谅我。
在这里,我在 python 中有一个二维列表:
L = [[1],[1,2],[1,2,3]]
我想在 C 模块中调用一个函数,并将其作为参数。由于 CI 中没有二维列表,因此希望将其转换为 *int 数组。
我不想要一个普通的 2D C 数组,因为每个条目的长度都是不同的。
我在 python 部分所做的是:
L = [[1],[1,2],[1,2,3]]
entrylist = []
for entry in L:
c_entry = (ctypes.c_int * len(entry))(*entry) # c_entry is the C array version of entry
entrylist.append(c_entry)
c_L = (ctypes.POINTER(ctypes.c_int) * len(entrylist))(*entrylist) # create an array of integer pointer, then initial it
c_L
是一个“LP_c_long_Array_14 对象”,当len(L) == 14
.
另外,我可以通过使用完美打印出来
for i in range(len(L)):
for j in range(len(L[i])):
print(L[i][j], end = ' ')
print()
另一方面,在 C 代码中,我将函数定义为:
int fun(int** c_L)
int fun( (int * c_L)[])
两者都不起作用。ctypes 抛出“不知道如何转换参数 1”错误。
那么,请告诉我如何使它工作?非常感谢。