Taille d'un tableau statique

Fermé
Mr Drerrawyn - 23 mai 2014 à 22:33
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 24 mai 2014 à 16:31
Bonjour,
Je fais une fonction arrayLength qui retourne la taille d'un tableau statique d'int, la voici:
int arrayLength(int myArray[]) {
    return sizeof(myArray);
}

Le problème c'est qu'au lieu de me retourner 16 (le tableau a une longueur de 16) il me retourne 1 (le sizeof(int) donne 4, c'est un tableau de int, c'est peut-être du à ça ?, mais dans le main, ça marche parfaitement).
Comment faire pour résoudre mon problème ?

4 réponses

Mr Drerrawyn
24 mai 2014 à 09:21
Merci pour cette réponse, mais comment ça se fait que dans le main ça marche ?
Il n'y a pas de moyen de le faire fonctionner dans une fonction ?
1
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
23 mai 2014 à 22:37
Bonsoir,

myArray est un tableau, donc un pointeur, le sizeof renvoie la taille du pointeur, pas du tableau (qui n'a pas d'existence réel en mémoire, ce n'est qu'une succession de cases mémoire dont tu connais la position)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 mai 2014 à 11:05
Non, un tableau n'est pas un pointeur...

Le tableau désigne l'ensemble des éléments. Mais lorsque tu utilises un tableau, il est converti en pointeur sur le premier élément. Il y a quelques exceptions où il n'y a pas conversion comme l'opérateur sizeof.

De fait, sizeof myArray renvoie la taille du tableau.
Mais si tu fais, arrayLength(myArray), myArray est converti en pointeur sur le premier élément. C'est comme si tu faisais : arrayLength(&myArray[0]);
De fait, le sizeof myArray dans la fonction arrayLength() te renverra la taille d'un pointeur et non celle du tableau.

Cdlt,
0
ptitcois Messages postés 91 Date d'inscription lundi 2 juillet 2007 Statut Membre Dernière intervention 26 novembre 2017 5
24 mai 2014 à 15:51
Sizeof fait tout statiquement, or si sizeof récupere un parametre de fonction ce n'est plus static et il le consdere comme un pointeur. Il faut rajouter le mot clé "inline" avant la définition de la fonction. Il faut bien déclarer ton tableau statiquement, sinon ça n'a aucune chance de fonctionner...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 24/05/2014 à 16:29
Rien à voir avec le côté static... La norme prévoit la conversion du tableau et pointeur sur le 1er élément à quelques exceptions dont le sizeof.
Donc impossible de le faire via une fonction en C. Il faut passer la taille en paramètre...
Et inline n'existe pas en C88/C90.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
24 mai 2014 à 16:31
NB. Cette discussion était dans le forum Programmation, c'est moi qui l'ai redirigé vers le forum C, mais c'était peut-être du C++ (je ne pense pas que ça change grand chose dans ce cas).
0