如何在ctypes中使用指向数组的指针声明一个C结构?

时间:2010-06-25 12:45:11

标签: python c ctypes

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

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

这是我到目前为止所做的:

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在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]访问数组的元素,而不必两次取消引用。