Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Une question à propos des sizeof

Sujet résolu
Anonyme
    13 avril 2006 à 14:13:56

    Bonjour,
    je vois parfois dans des codes
    sizeof s

    généralement dans des fgets. Or, dans le cours de M@téo, c'est dit que sizeof(T) retournait la taille en octets du type T. Là, il n'y a pas de parenthèses, et la valeur donnée est une chaine de caractères! ça retournerait donc la taille de la chaine?!
    • Partager sur Facebook
    • Partager sur Twitter
      13 avril 2006 à 14:16:01

      Je crois que ça retourne la taille du tableau en question en effet. Je n'ai appris ça que sur le tard.
      Par contre, cette taille dépend du type de données du tableaux.

      Si tu veux le nombre de "cases", il faut diviser cette valeur par le sizeof d'une case ^^
      • Partager sur Facebook
      • Partager sur Twitter

      If you'd like to join us, read "How do we work at OpenClassrooms"! :)

        13 avril 2006 à 14:16:49

        sizeof exp
        retour la taille de l'expression exp.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          13 avril 2006 à 14:18:22

          Ok merci! donc si j'ai par exemple un tableau d'int var[??], et que je veux connaitre ??, je fais sizeof var/sizeof(int)?
          • Partager sur Facebook
          • Partager sur Twitter
            13 avril 2006 à 14:34:13

            attention :


            si tu defini un

            char tab[200];

            sizeof(tab) retourne 4 (ur une archi 32bit). car Tab est un pointeur. Le sizeof ne peut donc pas etre utiliser pour determiner la tailel d'un tableau !!!!
            • Partager sur Facebook
            • Partager sur Twitter
              13 avril 2006 à 16:40:30

              N'importe quoi .....
              char buf[200]; -> sizeof (buf)==200*sizeof(char)
                                sizeof (buf)/sizeof(char)==200
              char* buf = malloc (200); -> sizeof(buf)==sizeof(char*)==(le plus souvent)4


              • Partager sur Facebook
              • Partager sur Twitter
                13 avril 2006 à 16:46:34

                Citation : hexapode

                si tu defini un

                char tab[200];

                sizeof(tab) retourne 4 (ur une archi 32bit). car Tab est un pointeur. Le sizeof ne peut donc pas etre utiliser pour determiner la tailel d'un tableau !!!!


                Merci de cesser de raconter n'importe quoi.

                Il est parfaitement correct de déterminer la taille d'un tableau avec sizeof.

                Citation : Ze moi

                Ok merci! donc si j'ai par exemple un tableau d'int var[??], et que je veux connaitre ??, je fais sizeof var/sizeof(int)?


                Absolument. On peut aussi faire

                sizeof var/sizeof var[0]
                sizeof var/sizeof var[i]
                sizeof var/sizeof var[123456]
                sizeof var/sizeof *var

                Comme ça, on est indépendant du type, comme dans :
                T *p = malloc (sizeof *p * 123);


                C'est pourquoi il est pratique de définir une macro qui permet de déterminer le nombre d'élements d'un tableau. (J'insiste).
                #define NELEM(a) (sizeof(a)/sizeof*(a))


                Je rappelle que malgré les apparences, un paramètre de fonction de la forme

                void f(T*a))
                void f(T a[])
                void f(T a[123])

                n'est pas un tableau, mais un pointeur et que par conséquend, la macro ne fonctionne pas. Il convient de passer le nombre d'élements en paramètre.

                Je rappelle aussi que le type retourné par sizeof est size_t (entier non signé). Ce type est donc naturellement adapté pour
                • les tailles d'objets
                • les index (sauf négatif)
                • les dimensions de tableau
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                Anonyme
                  13 avril 2006 à 17:44:44

                  Ok merci à tous!
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [C] Une question à propos des sizeof

                  × 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