L’utilisation d’un pointeur sur une structure non nommée en C?

Quelle est l’utilité de quelque chose comme

typedef struct { int field_1; float field_2; }*T; 

en C ?

Puisqu’une struct est un type de données en C , où sont stockées les informations sur le type de données désigné par T et comment initialiser correctement une variable var déclarée comme T var ?

T est un alias pour un pointeur sur la structure. La structure elle-même n’est pas un type, mais T est.

T n’est pas stocké ailleurs que dans les tables internes des compilateurs pour les types.

Vous pouvez l’utiliser comme

 T myVariable = malloc(sizeof(*myVariable)); 

Je m’attendrais à ce que quelque chose comme ça (pointeur vers une structure non nommée) soit utilisé pour décrire les données qui proviennent de l’extérieur du programme en question (par exemple, données comme valeur de retour d’une fonction de bibliothèque, lorsqu’elles sont allouées. et désalloué par cette bibliothèque). Ensuite, une telle typedef est juste une spécification sur la façon d’accéder à ces données.

L’utilisation est comme si la structure était nommée. C’est-à-dire que vous pouvez accéder aux champs de structure via ce pointeur. Par exemple:

 void fun(T p) { if (p->field_1 == 0) p->field_2 = 1.2345; } 

Si vous n’avez jamais besoin de référencer une structure elle-même par un nom, il n’est pas nécessaire de lui en donner un. Les informations sur la structure (et ses membres) sont stockées dans les tables du compilateur de la même manière que pour les structures nommées.

Cette construction est utile pour définir des structures de données complexes (éventuellement avec des unions) et ne pas polluer l’espace de noms global avec des noms inutiles. Par exemple:

  struct myUsefulStructure { int stype; union { struct { // a structure which is never referenced itself ... } x; struct { // another structure which is never referenced itself ... } y; } u; };