[c/c++]taille tableau entier

Résolu
Utilisateur anonyme -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
salut !

voila, j'ai un petit soucis. je vous mets vite fait e code :

void taille(int * tab)
{
     int Taille = sizeof(tab)/sizeof(int);
     cout << Taille << endl;
}


le soucis est que ca renvoir toujours 1 (taille d'un int : 4 ... )

en fait j'ai l'impression que ca ne prend que la taille de la premiere case du tableau (soit 4) et ca divise donc par la meme taille .... quelqu'un pourrait-il me donner un p'tit coup de main? merci d'avance =)

2 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Ce n'est pas la bonne explication.
    Même en envoyant un tableau, ou un pointeur pointant sur une zone allouée tu obtiendras (souvent) 1.
    La raison est simple : en C/C++, il n'est pas possible d'envoyer de tableau en argument. Le C/C++ transformera le tableau en adresse sur le premier élément du tableau. Ainsi même si tu envoies un tableau en argument, le sizeof vaudra sizeof(char*) (qui vaut 4 sur une architecture 32 bits). Dès lors, puisque ton sizeof(int) vaut 4 sur ta machine, tu obtiens 1.
    Cette fois, c'est résolu ;-))).
    1
    1. Utilisateur anonyme
       
      oui, j'avais remarqué ca =)


      le seul moyen est d'ajouter un paramètre à la méthode qui lui contient la taille. Le seul tableau avec lequel ca marche est la liste chainée (ou char*) qui lui, grâce à :

      strlen(char*)


      ou ce code :
      int methode(char * ch)
      {
         int i;
         for( i = 0 ; ch[i] != '\0' ; i++ );
         return i;
      }
      


      enfin voila ^^ le seul moyen est soit de créer un type tableau d'entier avec un caracrère de fin, soit passer la taille en paramètre.

      bisou à tous
      0
      1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > Utilisateur anonyme
         
        Tu peux oublier le moyen avec le caractère de fin. C'est une mauvaise idée. Le mieux c'est de passer la taille en paramètre (type size_t).
        0
      2. Utilisateur anonyme > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        oui c'est ce que je ferai pour mon code actuel, mais le type que j'utiliserai sera un int =D
        0
      3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > Utilisateur anonyme
         
        C'est toi qui voit. Mais size_t est plus classique en C, et ça sert à ça.
        Par exemple, void fonction( int *tab, size_t taille);
        Et quand tu appelles la fonction : fonction(tab, sizeof taille/sizeof *taille);

        Cdlt,
        0
  2. Utilisateur anonyme
     
    en fait il faut obligatoirement qu'un allocation mémoire soit fait quelque part. résolu
    0