Maison >développement back-end >C++ >Comment déterminer la taille d'un tableau transmis à une fonction C ?

Comment déterminer la taille d'un tableau transmis à une fonction C ?

DDD
DDDoriginal
2024-11-08 14:38:02840parcourir

How Do You Determine the Size of an Array Passed to a C   Function?

Détermination de la taille d'un tableau lors du passage à des fonctions en C

Contrairement à la fonction principale, où sizeof() renvoie directement la taille d'un tableau , passer un tableau à une fonction nécessite une prise en compte en raison de la dégradation du tableau vers les pointeurs.

Array Decay to Pointeurs

Lorsqu'ils sont passés en argument, les tableaux se désintègrent en pointeurs vers leur premier élément. Cela signifie que l'expression sizeof(some_list) dans une fonction donnera la taille du pointeur, pas la taille de l'ensemble du tableau.

Problème de rapport de taille

Utilisation l'expression (sizeof(some_list)/sizeof(*some_list)) pour calculer la taille du tableau ne fonctionne pas car :

  • sizeof(some_list) renvoie la taille du pointeur, qui est généralement de 4 octets (pour les systèmes 32 bits).
  • sizeof(*some_list) renvoie la taille de l'élément individuel du tableau, qui fait généralement 4 octets pour les entiers.

Ce rapport donne toujours 1, quel que soit le tableau taille. Ainsi, la fonction length_of_array renvoie toujours 1.

Méthode alternative utilisant des modèles

Pour déterminer avec précision la taille d'un tableau lorsqu'il est transmis à une fonction, utilisez un modèle :

template<size_t N>
int length_of_array(int (&amp;arr)[N])
{
    return N;
}

Cette approche utilise un paramètre de modèle N pour spécifier la taille du tableau, qui est ensuite renvoyée par la fonction.

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