Maison > développement back-end > C++ > Comment utiliser des boucles for basées sur une plage sur des tableaux transmis à des fonctions non principales en C ?

Comment utiliser des boucles for basées sur une plage sur des tableaux transmis à des fonctions non principales en C ?

Susan Sarandon
Libérer: 2024-10-25 09:29:29
original
963 Les gens l'ont consulté

How to Use Range-Based for-Loops on Arrays Passed to Non-main Functions in C  ?

Boucle for basée sur une plage sur un tableau transmis à une fonction non principale

Lors de l'attribution d'un tableau à un pointeur dans un appel de fonction, le compilateur déduit le type du pointeur et perd une information cruciale : la taille du tableau. Cette divergence déclenche des erreurs lors de la tentative d'exécution de boucles for basées sur une plage dans la fonction.

Pour résoudre ce problème, une solution consiste à utiliser une référence de tableau au lieu d'un pointeur. Ce faisant, la fonction conserve la connaissance de la taille du tableau :

<code class="cpp">void foo(int (&amp;bar)[3]);

int main() {
  int bar[3] = {1, 2, 3};
  for (int i : bar) {
    cout << i << endl;
  }
  foo(bar);
}

void foo(int (&amp;bar)[3]) {
  for (int i : bar) {
    cout << i << endl;
  }
}
Copier après la connexion

Alternativement, une approche générique peut être utilisée en introduisant un paramètre de modèle représentant la taille du tableau :

<code class="cpp">template <std::size_t array_size>
void foo(int (&amp;bar)[array_size]) {
  for (int i : bar) {
    cout << i << endl;
  }
}</code>
Copier après la connexion

Par en tirant parti de ces techniques, il devient possible d'exécuter avec succès des boucles for basées sur une plage sur des tableaux transmis à des fonctions non principales.

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