Maison > développement back-end > C++ > Comment puis-je déterminer de manière fiable la taille d'un tableau transmis à une fonction C ?

Comment puis-je déterminer de manière fiable la taille d'un tableau transmis à une fonction C ?

Susan Sarandon
Libérer: 2024-12-30 02:53:28
original
842 Les gens l'ont consulté

How Can I Reliably Determine the Size of an Array Passed to a C   Function?

Détermination de la taille d'un tableau dans une fonction passée

Le problème se pose en C , où déterminer la taille d'un tableau passé à une fonction pose un problème défi en raison de l'incapacité de sizeof à capturer avec précision la longueur du tableau.

Une solution populaire suggère de terminer la boucle lorsque l'élément du tableau array[i] atteint NULL. Cependant, cette approche peut conduire à des erreurs, car array[i] contient parfois des valeurs aléatoires vers la fin du tableau.

Solution basée sur un modèle avec références de tableau

C offre une solution plus fiable grâce à des modèles et des références de tableau :

template <typename T, int N>
void func(T (&a)[N]) {
    for (int i = 0; i < N; ++i) a[i] = T(); // reset all elements
}
Copier après la connexion

Cette fonction basée sur un modèle prend un tableau a de type T avec une taille fixe de N. En utilisant l'opérateur de référence &, il lie le tableau d'origine à a, permettant d'accéder aux éléments du tableau sans transmettre explicitement la taille.

Pour utiliser cette fonction, déclarez simplement un tableau et transmettez-le par référence :

int x[10];
func(x);
Copier après la connexion

Il est important de noter que cette solution s'applique uniquement aux tableaux, pas aux pointeurs. Pour les tableaux basés sur des pointeurs, une meilleure option consiste à utiliser le conteneur std::vector de la bibliothèque de modèles standard (STL), qui fournit des capacités d'accès à la taille et aux éléments.

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 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