Taille d'un pointeur ou d'un tableau ( très bizarre )
thristam
Messages postés23Date d'inscriptionmercredi 16 juillet 2003StatutMembreDernière intervention28 mars 2013
-
9 févr. 2005 à 00:01
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
9 févr. 2005 à 09:00
Bonjour à tous,
Quand je veux connaitre la taille d'un tableau , je fais :
int i[10];
cout<<sizeof(i)/sizeof(int); // affiche 10
Pas de problème
Par contre , si je fais la même chose avec un pointeur , suprise ! :
int *i;i new int[10]; // pareil avec i (int*)malloc(sizeof(int)*10);
cout<<sizeof(i)/sizeof(int); // affiche 1 !!!!!
J'ai obtenu ce résultat avec devcpp. Je suis obligé de passer par un pointeur pour faire une classe Tableau.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 9 févr. 2005 à 06:42
Un pointeur n'est pas une variable stockant des données, mais une
adresse mémoire. La taille d'un pointeur int est donc bien différente
de la taille d'un int !
DarK Sidious
Administrateur et reponsable VB/API du site www.ProgOtoP.com
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 9 févr. 2005 à 09:00
La taille d'un pointeur (peut importe un pointeur sur quoi) est de 4 octets sur plateforme 32 bits, de même que la taille d'un int (désolé mais tu t'es trompé ou mal exprimé DARKSIDIOUS).
l'opérateur sizeof() permet de connaitre la taille su variable. Lorsque tu l'utilise avec un tableau statique (dont la taille est connu à la compilation), sizeof donne la taille en octets du tableau. Par contre avec un pointeur sur un tableau (créé dynamiquement ou même pointant sur un tableau statique) sizeof() renverra toujours 4 (sur plateforme 32 bits).
En conclusion, losque tu passe des tableaux en paramètres de fonctions (par l'intermédiare d'un pointeur), il faut égalemnt passer sa taille car sinon tu n'aura aucun moyen de la connaître).
Conclusion 2 : sizeof(array)/sizeof(array[0]) ne marche donc qu'avec des tableaux dont la taille est connue à la compilation.