Maison  >  Article  >  développement back-end  >  Pourquoi `sizeof()` se comporte-t-il différemment pour les arguments de tableau dans les fonctions C ?

Pourquoi `sizeof()` se comporte-t-il différemment pour les arguments de tableau dans les fonctions C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-12 01:35:02801parcourir

Why Does `sizeof()` Behave Differently for Array Arguments in C   Functions?

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 (&amp;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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn