
Envoyé par
jank974
Bonjour,
je suis débutant en langage C et je viens d'apprendre les structures, cependant, il y'a quelque chose que je n'arrive pas a comprendre:
1 2 3 4
| typedef struct element {
int information;
structure element *pprochain;
}elem; |
dans la structure ci dessus, je ne comprend pas pourquoi cette structure a deux noms qui sont element et elem. a quoi sert le element avant l'acolade?
merci d'avance
(
dans la structure, c'est pas 'structure', mais 'struct').
En fait il y a 2 syntaxes à considérer.
1- Pour définir une structure, on utilise le mot clé struct, suivit du nom de la structure :
1 2 3 4 5 6
|
struct element
{
int information;
struct element *pprochain;
}; |
ce code est tout à fait valide, car struct element est défini avant son usage dans cette strucr=ture dite 'récursive'.
2 - il est possible, pour des raison diverses, pas toujouts très justifiées, de définir un 'alisa' sur le nom re la structure, qui consiste à remplacer struct xxx par un nom de son choix (par exemple xxx, xxx_s ou XXX ou Xxx ou foo ... il n'y a pas de règle imposée par le C.).
typedef struct element elem;
On peut placer cette définition un peut où on veut. Utilisée toute seule, elle permet d'implémenter les 'objets opaques' dont on ne connait que le nom mais pas le contenu (comme FILE, par exemple).
Il est aussi possible de combiner la définition de la structure et du typedef comme ceci :
1 2 3 4 5 6 7
|
typedef struct element
{
int information;
struct element *pprochain;
}
elem; |
On peut se demander à quoi sert alors le 'tag', c'est à dire le mot placé après 'struct'. En fait, généralement à rien, sauf ici, car il permet de définir le type de l'élément pprochain.
Une autre possibilité est de séparer la définition de la structure et celle de l'alias, et de la placer après :
1 2 3 4 5 6 7 8
|
typedef struct element elem;
struct element
{
int information;
elem *pprochain;
}; |
Dans ce cas (la définition de l'alias étant avant celle de la structure), on peut utiliser l'alias (elem) pour définir pprochain.
Partager