Как объявить структуру C с указателем на массив в ctypes?

1

Я прочитал официальный 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",?????????)]

Спасибо за вашу помощь!

Теги:
ctypes

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] вместо того, чтобы дважды выполнять разыгрывание.

  • 0
    Привет, Даниэль, я разыменовываю 'w1' дважды, так как использую его как двумерный массив.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню