Comment puis-je avoir un pointeur sur la prochaine structure dans la définition de cette structure:
typedef struct A {
int a;
int b;
A* next;
} A;
C'est comme ça que je l'ai écrit pour la première fois, mais ça ne marche pas.
Comment puis-je avoir un pointeur sur la prochaine structure dans la définition de cette structure:
typedef struct A {
int a;
int b;
A* next;
} A;
C'est comme ça que je l'ai écrit pour la première fois, mais ça ne marche pas.
Vous pouvez définir la définition de type et de déclarer avant la struct tout d'abord dans une déclaration, puis définir la structure dans une définition ultérieure.
typedef struct A A;
struct A
{
int a;
int b;
A* next;
};
Edit: Comme d'autres l'ont mentionné, sans les declaratation la struct nom est encore valable à l'intérieur de la structure de la définition (c'est à dire que vous pouvez utiliser struct A
), mais la définition de type n'est pas disponible jusqu'à ce que après la définition de type de définition est complète (et donc, en utilisant seulement A
ne serait pas valide). Ce n'est pas trop grave trop avec juste un pointeur de membre, mais si vous avez une structure de données complexe, avec beaucoup d'auto-type des pointeurs, peut-être moins wieldy.
S'il vous plaît, vous êtes en C, pas du C++.
Si vous devez vraiment un typedef struct (et la plupart des programmeurs que je travaille avec not1), faites ceci:
typedef struct _A {
int a;
int b;
struct _A *next;
} A;
pour distinguer l' _A
(en struct
d'espace de noms) et A
(dans l'espace de noms du type).
1typedef
masque de la taille et de stockage du type il des points à l'argument (et je suis d'accord), c'est que dans un langage de bas niveau comme le C, en essayant de cacher quoi que ce soit est dangereux et contre-productif. S'habituer à taper struct A
chaque fois que vous entendez struct A
.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.