2010-06-25 6 views
1

J'ai lu le official ctypes tutorial et a également cherché SO, mais je ne pouvais pas trouver un moyen de déclarer ce type de structure avec ctypes. Cette structure est renvoyée par l'une des fonctions pour lesquelles j'écris une interface Python.Comment déclarer une structure C avec un pointeur sur array dans ctypes?

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

C'est ce que j'ai jusqu'à présent:

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

Merci pour votre aide!

Répondre

1

En C, un pointeur vers un tableau stocke la même adresse mémoire qu'un pointeur vers le premier élément du tableau. Par conséquent:

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

Vous pouvez accéder aux éléments du tableau à l'aide d'index entiers. Par exemple: myfoo.w1[5].

Il serait meilleur style de codage C pour déclarer w1 comme float *w1, afin que vous puissiez accéder à des éléments du tableau à l'aide myfoo->w1[5] au lieu d'avoir à déréférencer deux fois.

+0

Bonjour Daniel, Je déréférence "w1" deux fois que je l'utilise comme un tableau 2d. – Framester

Questions connexes