Bonjour,
ma question est peut être plus une question de méthode. J'aimerais savoir si il y a un moyen de s'assurer de la taille d'un tableau passé en paramètre d'une fonction.
Il y a plusieurs raisons à cela :
- s'assurer de la bonne utilisation de la fonction par le code client. Je ne voudrais pas par exemple que le code client passe un tableau de 2 éléments quand il en faudrait 4.
- avoir une fonction qui a un comportement différent selon le nombre d'éléments dans le tableau
Je sais que lorsqu'un tableau est passé comme argument d'une fonction c'est en fait implicitement un pointeur qui est passé, et c'est ce qui pose problème justement. J'ai bien pensé à demander un second argument contenant le nombre de champs dans le tableau, mais cela ne résout que partiellement le problème car rien ne garanti que le tableau passé fasse effectivement la taille annoncée.
Pour illustrer ma question :
cela retourne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include <iostream> #include <cstdlib> void f( int entier[4], int n ){ std::cout<<"il y a "<<n<<" entiers."<<std::endl; for( unsigned int i = 0; i<n ; ++i ){ std::cout<<" entier "<<i<<" : "<<entier[i]<<std::endl; } } int main( int argc, char* argv[]){ int entier4[] = {0,1,2,3}; int entier8[] = {0,1,2,3,4,5,6,7}; f(entier8,8); // good behaviour f(entier4,8); // bad behaviour return EXIT_SUCCESS; }
Merci d'avance pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 il y a 8 entiers. entier 0 : 0 entier 1 : 1 entier 2 : 2 entier 3 : 3 entier 4 : 4 entier 5 : 5 entier 6 : 6 entier 7 : 7 il y a 8 entiers. entier 0 : 0 entier 1 : 1 entier 2 : 2 entier 3 : 3 entier 4 : 0 entier 5 : 0 entier 6 : 852933709 entier 7 : 32669
PS: je poste ici et non dans le forum C car je travaille effectivement en C++ et celui-ci apporte peut être des solutions différentes à ce problème.
Partager