Как объявить структуру C с указателем на массив в ctypes? - PullRequest
1 голос
/ 25 июня 2010

Я прочитал официальный учебник по ctypes , а также искал 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 Ответ

1 голос
/ 25 июня 2010

В 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] вместо необходимости разыменования дважды.

...