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

Signaler
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
-
cs_Chatbour
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
-
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.

2 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10
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.
Messages postés
764
Date d'inscription
jeudi 27 juillet 2006
Statut
Membre
Dernière intervention
6 septembre 2010
17
merci beaucoup :)