Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme de compréhension stucture pile

    9 août 2019 à 15:28:38

    Bonjour,

    Je suis débutant en programmation c et je suis les cours je Jason Champagne sur utube.

    J'ai fait l'allocation dynamique de mémoire et maintenant je commence à m'attaqué aux structures de données à commencé par la pile.

    Mais je ne comprends pas les notations utilisés dans la vidéos.

    Voir le code ci dessous :

    11 // Définition d'une pile
     12 typedef struct Stackelement
     13 {
     14         int value;
     15         struct Stackelement* next;
     16 } Stackelement, *Stack;
    

    Ce qui me dérange ce sont les deux noms données à la structure c'est à dire Stackelement et *Stack.

    Ce que je ne comprends pas c'est que ces deux noms donnée à la structure ne sont pas du même type, Stackelement est le nouveau nom d'un type de donnée

    tandis que *Stack est un pointeur enfin si j'ai bien compris. Pouvez vous m'expliquez s'il vous plais.

    • Partager sur Facebook
    • Partager sur Twitter
      9 août 2019 à 15:50:01

      typedef déclare de nouveau type.

      dans ton code il déclare le type Stackelement équivalent à struct Stackelement

      et Stack équivalent à pointeur sur struct Stackelement.

      Tu aurais pu le décomposer de cette façon :

      struct Stackelement
      {
          int value;
          struct Stackelement* next;
      };
      typedef struct Stackelement Stackelement;
      typedef struct Stackelement *Stack;

      PS : Déclarer un type pointeur est plutôt déconseillé, ça rend le code moins lisible.

      • Partager sur Facebook
      • Partager sur Twitter
        9 août 2019 à 15:55:28

        Merci rouloude pour tes explications c'est plus clair dans ma tête maintenant.

        Mais si j'ai bien compris ce que tu m'as dis c'est une mauvais pratique de faire de tel chose ?

        • Partager sur Facebook
        • Partager sur Twitter
          9 août 2019 à 16:15:10

          Hello,

          Oui, cacher un pointeur derrière un typedef est une mauvaise pratique. C'est une source d'emm.... et c'est fatigant: il faut constamment avoir en tête que Stack est un pointeur sur une donnée de type struct Stackelement. Est-ce si dur d'écrire

          struct Stackelement *createStack(....) {
              struct Stackelement *newstack;
          
              ....
          
              return(newstack);
          }

          plutôt que

          Stack createStack(....) {
              Stack newstack;
          
              ....
          
              return(newstack);
          }

          ?

          En tout cas, le 1er code me parait bien plus "parlant" que le second.

          Bon, dans un simple exercice des 100 lignes et une seul typedef, passe encore, mais dans le monde réel....

          -
          Edité par edgarjacobs 9 août 2019 à 16:15:38

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            9 août 2019 à 16:18:09

            Comme je suis débutant en plus j'ai vraiment rien compris à ce cours es qu'il y a des cours sur openclassrom concernant la pile sur le langage c par ce que moi qui n'est pas l'habitude je mis perd je ne sais plus ce qui est pointeur de struct que structure.
            • Partager sur Facebook
            • Partager sur Twitter
              10 août 2019 à 6:19:57

              PierreBoutier1 a écrit:

              Comme je suis débutant en plus j'ai vraiment rien compris à ce cours es qu'il y a des cours sur openclassrom concernant la pile sur le langage c par ce que moi qui n'est pas l'habitude je mis perd je ne sais plus ce qui est pointeur de struct que structure.

              C'est une des raisons pour lesquelles il faut éviter les typedefs.

              C'est censé apporter de l'abstraction, en fait ça amène généralement de la confusion.  Exemple, si j'ai déclaré une Stack s1, et que plus loin je fais

              Stack s2 = s1;

              Et bien en  réalité, la pile qui est censée être représentée par s2 (c'est pour ca qu'on appelle son type Stack, non ?) n'est pas une copie de la pile s1.
              C'est juste un pointeur sur le même élément de pile. "Leaking abstraction".

              ----

              T'en as de bonnes : quand tu apprends un truc, normalement c'est un truc que tu ne connais pas déjà, et donc forcément tu ne peux pas avoir l'habitude.

              -
              Edité par michelbillaud 10 août 2019 à 6:24:55

              • Partager sur Facebook
              • Partager sur Twitter
                17 août 2019 à 1:58:55

                Bonjour

                En dépit de ce qu'on a dit sur les cours d'OpenClassrooms sur le langage C, Je crois que ce cours explique assez bien ce que sont les typedef, les pointeurs et les structures de piles ou autres.

                Les exemples sont assez clairs à mon avis.

                Je t'encourage donc à suivre ce(s) cours.

                • Partager sur Facebook
                • Partager sur Twitter

                Le Tout est souvent plus grand que la somme de ses parties.

                probleme de compréhension stucture pile

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown