0

c構造体の定義があります

struct Matrix {
    int width;
    int height;
    int** data;
};

Pythonのctypes.Structを使用して定義する方法は?

class Matrix( ctypes.Structure ):
    _fields_ = [
        ( "width", ctypes.c_int ),
        ( "height", ctypes.c_int ),
        ( "data", ??? ),
    ]

「データ」のタイプを定義する方法がわかりません。ここの誰かが助けますか?

4

1 に答える 1

1

の最も直訳は次のint**ようになります。

ctypes.POINTER(ctypes.POINTER(ctypes.c_int))

つまり、intへのポインタへのポインタです。

潜在的により慣用的な方法は、2D配列です。

ctypes.c_int * width * height

、ただし、そのためには、配列に含まれる要素の数を知る必要があります。サイズはctypesの型の一部です。どうやら、そのサイズが事前にわからない場合(および、構造体のインスタンスごとに変更される可能性がある場合)、ポインターへのポインターが最適なオプションです。

これをインスタンス化するには、間接参照が少し少なくなります。配列を作成するときまでに、定義上、配列の大きさがわかります。だから、あなたはただすることができます:

m.data = (ctypes.c_int * width * height)()

これにより、 height-length配列のwidth-length配列が得られますc_int。つまり、C ++コードと(大まかに)同じことをします。

m.data = new int[width][height];

または、必要に応じて:

m.data = (int**) malloc(sizeof(int) * width * height)
于 2012-07-17T10:00:13.630 に答える