Taille d'un pointeur ou d'un tableau ( très bizarre )

thristam Messages postés 23 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 28 mars 2013 - 9 févr. 2005 à 00:01
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Derniè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.


Qu'en penses-vous ?

2 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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.
0
Rejoignez-nous