最近、関数が頻繁に呼び出されるプロジェクトを行っているので、この部分ではCコードを使用したいと思います。私はctypesの初心者です。質問が非常に簡単な場合は、ご容赦ください。
ここに私はPythonの2Dリストを持っています:
L = [[1],[1,2],[1,2,3]]
パラメータとしてCモジュールの関数を呼び出したい。CIには2d-listがないので、それを*intの配列に変換したいと思います。
エントリの長さがそれぞれ異なるため、通常の2DC配列は必要ありません。
私が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を変換する方法がわからない」というエラーをスローします。
それで、それを機能させる方法を教えてください。どうもありがとうございます。