Maison > développement back-end > C++ > Comment déterminer la taille d'un tableau passé en argument de fonction en C ?

Comment déterminer la taille d'un tableau passé en argument de fonction en C ?

Patricia Arquette
Libérer: 2024-11-09 10:36:02
original
647 Les gens l'ont consulté

How to Determine the Size of an Array Passed as a Function Argument in C  ?

Détermination de la taille d'un tableau dans les paramètres de fonction C

Contrairement à la fonction principale, déterminer la taille d'un tableau passé en argument à une fonction en C, l'utilisation de sizeof() nécessite un modèle de référence. En effet, les tableaux se désintègrent en pointeurs lorsqu'ils sont transmis à des fonctions.

Array Decay to Pointers

Considérez l'extrait de code suivant :

int length_of_array(int some_list[]);
Copier après la connexion

Malgré la déclaration entre crochets, some_list se désintègre en un pointeur entier int* lorsqu'elle est passée en argument. Par conséquent, sizeof(some_list) renvoie la taille d'un pointeur, pas la taille du tableau.

Solution de modèle de référence

Pour déterminer correctement la taille d'un tableau, utilisez un modèle de référence. Par exemple :

template<size_t N>
int length_of_array(int (&amp;arr)[N]) {
  std::cout << N << std::endl; // Outputs the correct array size
  return N;
}
Copier après la connexion

Exception : tableaux multidimensionnels

Il existe une exception à la règle de désintégration des tableaux. Les tableaux multidimensionnels conservent leur dimensionnalité et ne sont pas transmis comme pointeurs. Par conséquent, sizeof() peut être utilisé directement pour déterminer leur taille :

int a[3][4];
std::cout << sizeof(a) / sizeof(a[0]); // Output: 4 (number of columns)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal