Quand sizeof() se comporte différemment dans les fonctions pour les arguments du tableau
En C, lors du passage d'un tableau à une fonction, il est essentiel de comprendre pourquoi sizeof() peut ne pas fonctionner de la même manière que lorsqu'il est utilisé dans la fonction principale.
Array Decay to Pointer
Contrairement aux langages comme Java, où les tableaux sont de vrais objets avec des méthodes et les propriétés, en C , les tableaux sont simplement des pointeurs. Lorsqu'un tableau est transmis à une fonction en tant qu'argument, il se désintègre en un pointeur vers le premier élément du tableau.
sizeof() sur Pointeurs vs. Tableaux
Dans la fonction principale, sizeof() appliqué à un tableau renvoie la taille totale du tableau en octets, y compris tous ses éléments. Cependant, lorsque sizeof() est utilisé sur le pointeur décomposé vers un tableau dans une fonction, il renvoie la taille du pointeur lui-même, qui serait généralement la taille d'un type entier (par exemple, sizeof(int)).
Solution de contournement pour déterminer la taille d'un tableau
Pour déterminer la taille d'un tableau qui s'est décomposé en un pointeur, le code suivant peut être utilisé :
int length_of_array(int* some_list) { // Not applicable here, but see below for when it might be return 0; }
Exception : tableaux transmis par référence
Il existe une exception à la règle de désintégration des tableaux. Les tableaux peuvent également être passés par référence, permettant d'accéder à leurs informations de taille. La syntaxe pour cela est la suivante :
template<size_t N> int length_of_array(int (&arr)[N]) { // Size of the array can be determined via the template parameter N return N; }
Dans ce cas, N représente la taille du tableau transmis, et il peut être utilisé pour déterminer la longueur du tableau avec précision.
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!