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

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

Barbara Streisand
Libérer: 2024-10-25 03:01:30
original
221 Les gens l'ont consulté

How to Use Range-Based For-Loops with Arrays Passed to Non-Main Functions in C  ?

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

Lors du passage d'un tableau en tant qu'argument à une fonction non principale fonction, les boucles for basées sur la plage peuvent échouer en raison de la perte des informations de taille. Voici comment résoudre ce problème :

Dans le code fourni, lors du passage de bar à foo, il se désintègre en pointeur, perdant sa taille. Pour préserver la taille du tableau, nous pouvons le passer par référence en utilisant un type de référence de 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, nous pouvons utiliser une approche générique avec une fonction modèle qui accepte automatiquement les tableaux de n'importe quelle taille :

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

int main() {
  int bar[3] = {1, 2, 3};
  for (int i : bar) {
    cout << i << endl;
  }
  foo(bar);
}</code>
Copier après la connexion

En préservant les informations sur la taille du tableau, les boucles for basées sur une plage peuvent être utilisées avec succès lors de la transmission de tableaux aux fonctions.

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