Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Invité de passage
    Inscrit en
    novembre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 4
    Points : 0
    Points
    0

    Par défaut Structure en langage C

    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:

    Code :
    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

  2. #2
    Membre du Club
    Inscrit en
    janvier 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : janvier 2007
    Messages : 273
    Points : 48
    Points
    48

    Par défaut

    En fait t'as structure s'appelle Element, mais Typdef signifie que tu en fait un type à part entière comme int, float ou autre. Et ce type de variable sera de type Elem. Enfin si je me plante pas. ca fait une paie que j'ai pas jouer en C

  3. #3
    Invité de passage
    Inscrit en
    novembre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 4
    Points : 0
    Points
    0

    Par défaut

    Oui mais je n'arrive pas a faire la difference avec element et elem dans cette structure, element c'est un peu un nom temporaire non ? a quoi sert un nom temporaire??

  4. #4
    Invité de passage
    Inscrit en
    novembre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 4
    Points : 0
    Points
    0

    Par défaut

    est ce que

    Code :
    1
    2
    3
    4
    typedef struct element {
    int information;
    struct element *pprochain;
    }elem;
    revient a faire ca:

    Code :
    1
    2
    3
    4
    5
    6
    7
    typedef struct elem elem;
    struct elem {
    int information;
    struct element *pprochain;
    }elem
     
    struct elem element;

    si c'est ca, j'ai compris, sinon, je n'ai rien compris

    merci

  5. #5
    Inactif
    Inscrit en
    décembre 2002
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : décembre 2002
    Messages : 534
    Points : 317
    Points
    317

    Par défaut

    Bonjour,

    Code :
    1
    2
    3
    4
    typedef struct elem 
    {
      ....
    } elem ;
    Dans ce cas elem peut être employé à la place de struct elem. La stucture a été redéfinie en un type unique.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2008
    Messages
    1 514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 514
    Points : 2 235
    Points
    2 235

    Par défaut

    Citation Envoyé par jank974 Voir le message
    est ce que

    typedef struct element {
    int information;
    struct element *pprochain;
    }elem;

    revient a faire ca:

    typedef struct elem elem;
    struct elem {
    int information;
    struct element *pprochain;
    }elem

    struct elem element;


    si c'est ca, j'ai compris, sinon, je n'ai rien compris

    merci
    Oui, c'est ça, tu as tout compris Sauf que dans le deuxième cas c'est struct elem * que tu dois mettre dans ta structure, pas struct element *

    Simplement, une fois qu'on a fait un typedef, en général on éviter d'utiliser "struct machin". On utilise le type à la place. Donc dans la définition de ta structure tu peux dire "elem *pprochain" au lieu de "struct elem *pprochain"

  7. #7
    Rédacteur
    Avatar de Emmanuel Delahaye
    Profil pro
    Inscrit en
    décembre 2003
    Messages
    14 508
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2003
    Messages : 14 508
    Points : 18 096
    Points
    18 096

    Par défaut

    Citation Envoyé par jank974 Voir le message
    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:

    Code :
    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 :
    Code :
    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.).

    Code :
    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 :

    Code :
    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 :

    Code :
    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.
    Pas de Wi-Fi à la maison : CPL

    Des infos sur la programmation et le langage C:
    http://bien-programmer.blogspot.com/
    http://www.bien-programmer.fr/
    http://bien-programmer.forum-actif.net/forum.htm

  8. #8
    Invité de passage
    Inscrit en
    novembre 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 4
    Points : 0
    Points
    0

    Par défaut

    merci a tous pour ces réponses claires, j'ai enfin compris.h

  9. #9
    Invité de passage
    Profil pro Vincent Menegaux
    Inscrit en
    mars 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Nom : Vincent Menegaux

    Informations forums :
    Inscription : mars 2010
    Messages : 1
    Points : 1
    Points
    1

    Par défaut reponse final

    Une structure peut aussi être écrite de cette façon :

    Code :
    1
    2
    3
    4
    typedef struct
    {
       int information;
    }nom_de_la_structure;
    qui veut dire : remplacer struct {int information;}; par nom_de_la_structure.
    donc si on écrit :

    Code :
    1
    2
    3
    4
    typedef struct element
    {
       int information;
    }elem;
    ce sera traduit comme : remplacer struct element {int information;}; par elem.

    si sa peut éclairer certaine personne.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •