Appel C++ par référence :utilisation de pointeurs [avec exemples]
Appel C++ par référence :utilisation de pointeurs [avec exemples]
Dans ce didacticiel, nous allons découvrir l'appel C++ par référence pour passer des pointeurs comme argument à la fonction à l'aide d'exemples.
Dans le didacticiel sur les fonctions C++, nous avons appris à transmettre des arguments à une fonction. Cette méthode utilisée est appelée passage par valeur car la valeur réelle est passée.
Cependant, il existe une autre façon de passer des arguments à une fonction où les valeurs réelles des arguments ne sont pas passées. Au lieu de cela, la référence aux valeurs est transmise.
Par exemple,
// function that takes value as parameter
void func1(int numVal) {
// code
}
// function that takes reference as parameter
// notice the & before the parameter
void func2(int &numRef) {
// code
}
int main() {
int num = 5;
// pass by value
func1(num);
// pass by reference
func2(num);
return 0;
}
Remarquez le &
en void func2(int &numRef)
. Cela indique que nous utilisons l'adresse de la variable comme paramètre.
Ainsi, lorsque nous appelons le func2()
fonction en main()
en passant la variable num comme argument, nous passons en fait l'adresse de num variable au lieu de la valeur 5 .
Exemple 1 :Passage par référence sans pointeurs
#include <iostream>
using namespace std;
// function definition to swap values
void swap(int &n1, int &n2) {
int temp;
temp = n1;
n1 = n2;
n2 = temp;
}
int main()
{
// initialize variables
int a = 1, b = 2;
cout << "Before swapping" << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
// call function to swap numbers
swap(a, b);
cout << "\nAfter swapping" << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
Sortie
Before swapping a = 1 b = 2 After swapping a = 2 b = 1
Dans ce programme, nous avons passé les variables a et b au swap()
fonction. Remarquez la définition de la fonction,
void swap(int &n1, int &n2)
Ici, nous utilisons &
pour indiquer que la fonction acceptera les adresses comme paramètres.
Par conséquent, le compilateur peut identifier qu'au lieu des valeurs réelles, la référence des variables est transmise aux paramètres de la fonction.
Dans le swap()
fonction, les paramètres de la fonction n1 et n2 pointent vers la même valeur que les variables a et b respectivement. Par conséquent, l'échange a lieu sur la valeur réelle.
La même tâche peut être effectuée à l'aide des pointeurs. Pour en savoir plus sur les pointeurs, consultez Pointeurs C++.
Exemple 2 :Passage par référence à l'aide de pointeurs
#include <iostream>
using namespace std;
// function prototype with pointer as parameters
void swap(int*, int*);
int main()
{
// initialize variables
int a = 1, b = 2;
cout << "Before swapping" << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
// call function by passing variable addresses
swap(&a, &b);
cout << "\nAfter swapping" << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
// function definition to swap numbers
void swap(int* n1, int* n2) {
int temp;
temp = *n1;
*n1 = *n2;
*n2 = temp;
}
Sortie
Before swapping a = 1 b = 2 After swapping a = 2 b = 1
Ici, nous pouvons voir que la sortie est la même que dans l'exemple précédent. Remarquez la ligne,
// &a is address of a
// &b is address of b
swap(&a, &b);
Ici, l'adresse de la variable est passée lors de l'appel de la fonction plutôt que la variable.
Puisque l'adresse est passée au lieu de la valeur, un opérateur de déréférencement *
doit être utilisé pour accéder à la valeur stockée dans cette adresse.
temp = *n1;
*n1 = *n2;
*n2 = temp;
*n1
et *n2
donne la valeur stockée à l'adresse n1 et n2 respectivement.
Depuis n1 et n2 contenir les adresses de a et b , tout est fait à *n1
et *n2 changera les valeurs réelles de a et b .
Par conséquent, lorsque nous imprimons les valeurs de a et b dans le main()
fonction, les valeurs sont modifiées.
Langue C