我阅读了official ctypes tutorial并进行了搜索,但找不到用ctypes声明这种结构的方法。这个结构是由我为其编写Python接口的函数之一返回的。

typedef struct{
    int i;
    float *b1;
    float (*w1)[];
}foo;

这就是我目前所拥有的:
class foo(Structure):
 _fields_=[("i",c_int),
  ("b1",POINTER(c_int)),
  ("w1",?????????)]

谢谢你的帮助!

最佳答案

在C语言中,指向数组的指针与指向数组中第一个元素的指针存储相同的内存地址。因此:

class foo(Structure):
    _fields_=[("i",c_int),
              ("b1",POINTER(c_int)),
              ("w1",POINTER(c_float))]

可以使用整数索引访问数组的元素。例如:myfoo.w1[5]
w1声明为float *w1将是更好的C编码样式,这样您就可以使用myfoo->w1[5]访问数组的元素,而不必解引用两次。

关于python - 如何用ctypes中的数组声明一个C结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3118071/

10-11 19:42