IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Structure en langage C


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Points : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 régulier
    Inscrit en
    Janvier 2007
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Janvier 2007
    Messages : 273
    Points : 83
    Points
    83
    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
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Points : 1
    Points
    1
    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
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    est ce que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct element {
    int information;
    struct element *pprochain;
    }elem;
    revient a faire ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    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
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    merci a tous pour ces réponses claires, j'ai enfin compris.h

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    1
    Détails du profil
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Structure EN LANGAGE C
    Par davidif dans le forum Débuter
    Réponses: 6
    Dernier message: 16/10/2013, 22h43
  2. [En vrac] 3. Structure du langage
    Par Christophe Genolini dans le forum Langage R++
    Réponses: 0
    Dernier message: 09/08/2013, 11h31
  3. Confusion affectation tableaux et structures en langage C
    Par DarkPoster14 dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2013, 22h48
  4. les structures en langage c
    Par youssef222 dans le forum Débuter
    Réponses: 8
    Dernier message: 17/04/2008, 11h12
  5. Structure du langage et fonctions
    Par $@&_# dans le forum Langage
    Réponses: 1
    Dernier message: 26/11/2006, 21h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo