Appel par référence en C++ : Utilisation des pointeurs - Exemples pratiques
Appel par référence en C++ : Utilisation des pointeurs - Exemples pratiques
Ce guide explique comment passer des arguments par référence en C++ en utilisant des pointeurs, avec des exemples de code clairs qui démontrent l'échange de valeurs et plus encore.
Dans le monde des fonctions C++, la façon par défaut de passer des données est par valeur : la fonction reçoit une copie des données originales. Bien que cela protège la variable originale, cela peut être inefficace pour les gros objets et empêche la fonction de modifier les données de l'appelant.
Le passage par référence résout les deux problèmes. Au lieu de copier les données, la fonction reçoit une référence (ou une adresse) vers la variable originale, permettant une manipulation directe. Cela est réalisé de deux manières équivalentes : en utilisant les références C++ ou les pointeurs bruts. Comprendre les deux approches vous donne de la flexibilité et une compréhension plus profonde de la gestion de la mémoire.
// Fonction qui prend une valeur
void func1(int numVal) {
// code
}
// Fonction qui prend une référence (syntaxe de référence C++)
void func2(int &numRef) {
// code
}
int main() {
int num = 5;
// Passage par valeur
func1(num);
// Passage par référence
func2(num);
return 0;
}
Le & dans void func2(int &numRef) indique que le paramètre est une référence. Quand func2 est appelé, l'adresse de num est passée, pas sa valeur, permettant à la fonction de modifier num directement.

Exemple 1 : Échange de valeurs avec les références C++
#include <iostream>
using namespace std;
// Fonction d'échange utilisant les références
void swap(int &n1, int &n2) {
int temp = n1;
n1 = n2;
n2 = temp;
}
int main() {
int a = 1, b = 2;
cout << "Avant l'échange\n";
cout << "a = " << a << "\n";
cout << "b = " << b << "\n";
swap(a, b);
cout << "\nAprès l'échange\n";
cout << "a = " << a << "\n";
cout << "b = " << b << "\n";
return 0;
}
Sortie
Avant l'échange a = 1 b = 2 Après l'échange a = 2 b = 1
Dans cet exemple, swap reçoit deux références. Comme n1 et n2 sont des alias pour a et b, les modifications à l'intérieur de la fonction affectent les variables originales.
Exemple 2 : Échange de valeurs avec les pointeurs
#include <iostream>
using namespace std;
// Prototype de fonction utilisant les pointeurs
void swap(int*, int*);
int main() {
int a = 1, b = 2;
cout << "Avant l'échange\n";
cout << "a = " << a << "\n";
cout << "b = " << b << "\n";
// Passage des adresses de a et b
swap(&a, &b);
cout << "\nAprès l'échange\n";
cout << "a = " << a << "\n";
cout << "b = " << b << "\n";
return 0;
}
// Fonction d'échange utilisant les pointeurs
void swap(int* n1, int* n2) {
int temp = *n1;
*n1 = *n2;
*n2 = temp;
}
Sortie
Avant l'échange a = 1 b = 2 Après l'échange a = 2 b = 1
Ici, swap accepte des pointeurs bruts. En déréférençant avec *, la fonction accède et modifie les valeurs aux adresses fournies. Le résultat est identique à la version par référence, mais la syntaxe des pointeurs rend le passage d'adresses explicite.
Le choix entre références et pointeurs dépend du contexte : les références offrent une syntaxe plus sûre et plus propre, tandis que les pointeurs fournissent un contrôle explicite sur les adresses mémoire et sont nécessaires pour l'allocation dynamique.
Quand utiliser chaque approche
- Références (recommandé par défaut) : Code plus lisible, pas de risque de pointeur nul, syntaxe naturelle.
- Pointeurs : Allocation dynamique, tableaux, interfaces C, pointeurs nuls valides, arithmétique de pointeurs nécessaire.
Langue C
- Maîtriser les directives using C# : Imports, alias et directives static
- Maîtriser les opérateurs C++ : Guide complet avec exemples pratiques
- Commentaires C++ : Bonnes pratiques pour un code lisible et maintenable
- Maîtriser les templates de classe en C++ : Guide pratique
- Maîtriser les pointeurs en C : Tutoriel pratique guidé par des experts
- Maîtriser les pointeurs en C++ : Concepts, exemples et applications pratiques
- 13 Types de Logiciels Malveillants en 2021 : Menaces, Exemples et Prévention
- 5 Modèles de Centres de Données Expliqués : Conception, Cas d'Usage et Exemples
- Exploration des 8 Grandes Tendances Technologiques de 2021 avec Exemples Concrets