Anomalie sizeof() lors du passage de tableaux à des fonctions en C
En C, l'opérateur sizeof() agit différemment lorsqu'il s'agit de tableaux transmis aux fonctions que lorsqu’ils sont utilisés dans la fonction principale. Cet écart peut être déroutant pour les débutants.
Passer correctement un tableau
Pour passer correctement un tableau à une fonction, il est essentiel de le passer par référence, en utilisant la syntaxe :
int length_of_array(int (&arr)[N]);
Où :
Utilisation de Sizeof() dans les fonctions
Lors de l'utilisation de sizeof() dans la fonction, ce qui suit est vrai :
sizeof(arr) == N * sizeof(int);
Explication :
Problème de passage incorrect du tableau
Dans l'extrait de code fourni, la fonction length_of_array() passe par inadvertance le tableau par pointeur, comme ceci :
int length_of_array(int some_list[]);
Cette méthode de transmission incorrecte provoque le problème suivant :
Solution de contournement à l'aide de modèles
Pour surmonter cette limitation, on peut utiliser une approche basée sur des modèles comme celle-ci :
template<size_t N> int length_of_array(int (&arr)[N]) { std::cout << N << std::endl; // Will output the correct array size return N; }
Point clé :
La différence essentielle entre les deux méthodes réside dans le passage de tableaux par référence plutôt que par pointeur. Le premier préserve la connaissance de la taille du tableau, tandis que le second ne le fait pas.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!