[c/c++]taille tableau entier

Résolu/Fermé
Utilisateur anonyme - 12 févr. 2010 à 16:53
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 24 févr. 2010 à 20:53
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

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
12 févr. 2010 à 17:11
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
Utilisateur anonyme
22 févr. 2010 à 12:15
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > Utilisateur anonyme
22 févr. 2010 à 18:43
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
Utilisateur anonyme > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
24 févr. 2010 à 09:44
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > Utilisateur anonyme
24 févr. 2010 à 20:53
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
Utilisateur anonyme
12 févr. 2010 à 16:57
en fait il faut obligatoirement qu'un allocation mémoire soit fait quelque part. résolu
0