Dans ce tutoriel, nous allons en apprendre davantage sur 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 à passer des arguments à une fonction. Cette méthode utilisée est appelée passage par valeur car la valeur réelle est transmise.
Cependant, il existe une autre façon de passer des arguments à une fonction où les valeurs réelles des arguments ne sont pas transmises. 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 &
in void func2(int &numRef)
. Cela indique que nous utilisons l'adresse de la variable comme paramètre.
Ainsi, lorsque nous appelons la func2()
fonction en main()
passant la variable num comme argument, nous transmettons en fait l'adresse de la variable num au lieu de la valeur 5 .

Exemple 1: passage par référence sans pointeurs
#include 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 << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; )
Production
Avant l'échange a = 1 b = 2 Après l'échange a = 2 b = 1
Dans ce programme, nous avons passé les variables a et b à la swap()
fonction. Notez la définition de la fonction,
void swap(int &n1, int &n2)
Ici, nous utilisons &
pour indiquer que la fonction acceptera des 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 passée aux paramètres de fonction.
Dans la swap()
fonction, les paramètres de 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, visitez Pointeurs C ++.
Exemple 2: passage par référence à l'aide de pointeurs
#include 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 << "After 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; )
Production
Avant l'échange a = 1 b = 2 Après l'échange 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 transmise lors de l'appel de fonction plutôt que la variable.
Étant donné que l'adresse est passée au lieu de value, 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 respectivement aux adresses n1 et n2.
Puisque n1 et n2 contiennent les adresses de a et b, tout est fait pour *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 la main()
fonction, les valeurs sont modifiées.