如何在ctypes中声明一个包含数组指针的C结构?

1 投票
1 回答
613 浏览
提问于 2025-04-16 00:26

我看了官方的ctypes教程,还在Stack Overflow上搜索过,但我找不到用ctypes声明这种结构的方法。这种结构是我为其中一个函数写Python接口时返回的。

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

这是我目前的进展:

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

谢谢你的帮助!

1 个回答

1

在C语言中,指向数组的指针和指向数组第一个元素的指针其实指向的是同一个内存地址。所以:

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

你可以用整数索引来访问数组的元素。例如:myfoo.w1[5]

为了写出更好的C代码,建议把w1声明为float *w1,这样你就可以用myfoo->w1[5]来访问数组的元素,而不需要进行两次解引用。

撰写回答