Taille d'un tableau statique
Mr Drerrawyn
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je fais une fonction arrayLength qui retourne la taille d'un tableau statique d'int, la voici:
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 ?
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 ?
A voir également:
- Taille d'un tableau en c
- Comment réduire la taille d'un fichier - Guide
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
4 réponses
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 ?
Il n'y a pas de moyen de le faire fonctionner dans une fonction ?
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)
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)
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,
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,
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...