[c/c++]taille tableau entier

Résolu
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. en fait il faut obligatoirement qu'un allocation mémoire soit fait quelque part. résolu
    0
    1. Contributeur
      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. 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
      2. Contributeur
        @Utilisateur anonymeTu 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
      3. @fiddyoui c'est ce que je ferai pour mon code actuel, mais le type que j'utiliserai sera un int =D
        0
      4. Contributeur
        @Utilisateur anonymeC'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