Maison  >  Article  >  développement back-end  >  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
Barbara Streisandoriginal
2024-10-25 03:01:30119parcourir

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

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>

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!

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