[c/c++]taille tableau entier
Résolu
Utilisateur anonyme
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
salut !
voila, j'ai un petit soucis. je vous mets vite fait e code :
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 =)
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:
- Longueur tableau c
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
2 réponses
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 ;-))).
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 ;-))).
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 à :
ou ce code :
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
Par exemple, void fonction( int *tab, size_t taille);
Et quand tu appelles la fonction : fonction(tab, sizeof taille/sizeof *taille);
Cdlt,