Pourquoi sizeof() ne fonctionne pas de la même manière pour les paramètres de tableau dans les fonctions C
En C, les tableaux se désintègrent en pointeurs lorsqu'ils sont transmis à fonctions, rendant l'utilisation de sizeof() peu fiable pour déterminer la taille du tableau. Pour comprendre cela, analysons la fonction suivante :
int length_of_array(int some_list[]) { return sizeof(some_list) / sizeof(*some_list); }
Problème avec le paramètre Array
Le paramètre some_list est déclaré comme un tableau, mais la signature de la fonction est effectivement équivalent à int length_of_array(int* some_list). En effet, les tableaux se décomposent en pointeurs dans les paramètres de fonction.
Effet sur sizeof()
L'utilisation de sizeof(some_list) dans ce contexte calcule la taille du pointeur, ce qui donne dans une valeur de 1. La division par sizeof(*some_list) (la taille d'un entier) donne 1.
Exemple
Dans l'exemple donné, malgré le tableau num_list contenant 15 éléments, la fonction length_of_array() renvoie systématiquement 1, comme le montre le résultat :
This is the output from direct coding in the int main function: 15 This is the length of the array determined by the length_of_array function: 1
Solution utilisant un modèle Fonctions
Pour déterminer la taille du tableau dans les fonctions, on peut utiliser des fonctions de modèle et passer le tableau par référence :
template<size_t N> int length_of_array(int (&arr)[N]) { return N; }
Dans ce cas, le paramètre de modèle N capture la taille connue du tableau, permettant à sizeof() de renvoyer la valeur correcte.
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!