Sizeof pour determiner automatiquement la taille d'un tableau [Résolu]

Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
- - Dernière réponse : cs_Chatbour
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
- 3 sept. 2010 à 13:32
Salut à tous et à toutes,

je me remets a C++ après une longue pause, donc soyez indulgents ^^

je me demande pourquoi ce code donne un résultat faux :

#include 
using namespace std;

void show(int array[])
{
for(int i=0; i<sizeof(array)/sizeof(int); i++)
{
cout << array[i] << ":";
}
cout << endl;
}

int main()
{
int arr[] = {5, 4, 3, 2, 1};
show(arr); // 1
cout << sizeof(arr)/sizeof(int); // 2
}


la fonction show n'affiche que la première case du tableau, pourtant l'expression 2 affiche la taille convenable du tableau arr : 5 . Quelqu’un a-t-il une explication ? Merci.
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10
3
Merci
Salut,

En C/C++, un tableau ne contient que ses données. Il ne contient pas d'information sur lui même tel que sa taille, comme c'est le cas en java, vb, delphi...

Tout ce que reçoit show en paramètre, c'est un pointeur où est supposé se trouver une certaine quantité d'entiers. Il ne peut pas savoir combien.

C'est peut être un peu plus clair sur cette exemple de cette page :
    int days[] = {1,2,3,4,5};
    int *ptr = days;
    printf("%u\n", sizeof(days));
    printf("%u\n", sizeof(ptr));


Dans le cas de ptr, sizeof renvoie la taille de ptr, c'est à dire un pointeur, donc 4 octets dans un prog 32 bits (Ce qui est la taille d'un int dans ton code -> 4 / 4 -> 1).

Pour ton code, tu peux par exemple réserver la première case du tableau pour contenir la taille, ou l'ajouter en argument à ta fonction show.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 207 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_rt15
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
16
0
Merci
merci beaucoup :)
Commenter la réponse de cs_Chatbour