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

Signaler
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
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

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