最近我正在做一個項目,一個函數被大量調用,所以我想在這部分中使用C代碼。我是ctypes的新手,如果我的問題很簡單,請原諒我。我怎樣才能將一個「整數指針數組」傳遞給c庫中的一個函數?python
這裏我有一個Python 2D名單:
L = [[1],[1,2],[1,2,3]]
我想調用C模塊中的功能與它的參數。由於C中沒有2d列表,我想將它轉換爲* 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」錯誤。
那麼,請告訴我如何使它工作?非常感謝你。
驚人溶液。非常感謝。 –