Passer le pointeur par référence en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la notation &var pour passer un objet par référence
  2. Utilisez la notation *&var pour passer un pointeur à un objet par référence
Passer le pointeur par référence en C++

Cet article montre plusieurs méthodes sur la façon de passer un pointeur par référence en C++.

Utilisez la notation &var pour passer un objet par référence

Généralement, une référence définit un alias pour l’objet en C++, et elle doit être initialisée lors de la déclaration. La référence initialisée reste liée à l’objet donné et ne peut pas être reliée à un autre objet. Les opérations sur les références modifient les objets liés eux-mêmes. Ainsi, ils constituent un moyen courant de transmettre des paramètres aux fonctions. Les références sont la méthode préférée car leur utilisation évite la copie implicite des objets dans la portée de la fonction appelée. L’exemple suivant montre le passage d’un objet std::vector par référence const à la fonction qui recherche dans les éléments la valeur donnée.

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

void findInteger(const vector<int> &arr, int k) {
  for (auto &i : arr) {
    if (i == k) {
      cout << "found - " << k << " in the array" << endl;
      return;
    }
  }
  cout << "couldn't find - " << k << " in the array" << endl;
}

int main() {
  vector<int> vec = {11, 21, 121, 314, 422, 4, 242};

  findInteger(vec, rand() % 100);

  return EXIT_SUCCESS;
}

Production:

couldn t find - 83 in the array

Utilisez la notation *&var pour passer un pointeur à un objet par référence

Par contre, on peut utiliser la notation *&var pour passer un pointeur par référence à la fonction. Un pointeur est un objet lui-même. Il peut être affecté ou copié pour transmettre une référence à un pointeur en tant que paramètre de fonction. Dans ce cas, le symbole & est une notation de référence et non l’opérateur d’adresse-de utilisé pour récupérer le pointeur vers l’emplacement de l’objet en mémoire. Notez que la valeur de l’objet passé doit être accédée avec l’opérateur de déréférence de pointeur standard - *. L’exemple de code ci-dessous imprime les valeurs ASCII de l’objet chaîne donné dans le flux cout.

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::string;
using std::vector;

void printASCII(string *&str) {
  for (auto &i : *str) {
    cout << (int)i << ", ";
  }
  cout << endl;
}

int main() {
  auto str = new string("Arbitrary string");

  printASCII(str);

  return EXIT_SUCCESS;
}

Production:

65, 114, 98, 105, 116, 114, 97, 114, 121, 32, 115, 116, 114, 105, 110, 103,
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ Pointer