Taille d'un tableau statique
Fermé
Mr Drerrawyn
-
23 mai 2014 à 22:33
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 24 mai 2014 à 16:31
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 24 mai 2014 à 16:31
A voir également:
- Taille d'un tableau en c
- Comment réduire la taille d'un fichier - Guide
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier 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 ?
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
23 mai 2014 à 22:37
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)
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)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
24 mai 2014 à 11:05
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,
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,
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
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...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 24/05/2014 à 16:29
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.
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.
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
24 mai 2014 à 16:31
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).