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 的指针。

一种可能更惯用的方式是二维数组:

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 回答