[c/c++]taille tableau entier

Résolu
nagashima Messages postés 4500 Statut Membre -  
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 =)
A voir également:

2 réponses

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
nagashima Messages postés 4500 Statut Membre 254
 
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
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > nagashima Messages postés 4500 Statut Membre
 
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
nagashima Messages postés 4500 Statut Membre 254 > 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
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > nagashima Messages postés 4500 Statut Membre
 
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
nagashima Messages postés 4500 Statut Membre 254
 
en fait il faut obligatoirement qu'un allocation mémoire soit fait quelque part. résolu
0