English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans cet article, vous allez apprendre à transmettre un pointeur comme paramètre d'une fonction et à l'utiliser efficacement dans le programme.
DansC ++FonctionDans cet article, vous avez appris à transmettre des paramètres à une fonction. Comme les valeurs réelles sont transmises, cette méthode s'appelle le passage par valeur.
Mais il existe une autre méthode pour transmettre des paramètres à une fonction, où les valeurs réelles des paramètres ne sont pas transmises. Au lieu de cela, seule la référence à cette valeur est transmise.
#include <iostream> using namespace std; // Prototype de la fonction void swap(int&, int&); int main() { int a = 11, b = 22; cout << "Avant l'échange" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(a, b); cout << "\nAprès l'échange" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; } void swap(int& n1, int& n2) { int temp; temp = n1; n1 = n2; n2 = temp; }
Résultat de la sortie
Avant l'échange a = 11 b = 22 Après l'échange a = 22 b = 11
Dans la fonction main(), deux variables entières a et b sont définies. Ces entiers sont transmis à la fonction swap() par référence.
Le compilateur peut identifier que cela est transmis par référence car la définition de la fonction est void swap(int& n1, int& n2) (Veuillez noter que le type de données suit&)).
Dans la fonction swap(), il ne reçoit que les références (adresses) des variables a et b, et l'échange se produit à l'adresse originale de la variable.
Dans la fonction swap(), n1et n2est un paramètre de forme, qui est en fait identique aux variables a et b.
Il existe une autre manière d'utiliserPointeurMéthode pour accomplir la même tâche.
#include <iostream> using namespace std; // Prototype de la fonction void swap(int*, int*); int main() { int a = 1, b = 2; cout << "Avant l'échange" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(&a, &b); cout << "\nAprès l'échange" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; } void swap(int* n1, int* n2) { int temp; temp = *n1; *n1 = *n2; *n2 = temp; }
La sortie de cet exemple est la même que les résultats précédents.
Dans ce cas, l'adresse de la variable est transmise pendant l'appel de la fonction,而非变量本身。
swap(&a, &b); // &a est l'adresse de a, &b est l'adresse de b
Comme les adresses sont passées plutôt que les valeurs, il est nécessaire d'utiliser l'opérateur de déréférencement pour accéder aux valeurs stockées à cette adresse.
void swap(int* n1, int* n2) { ... .. ... }
* n1et* n2sont respectivement stockées à l'adresse n1et n2la valeur à
du fait que n1contient l'adresse de a, donc l'accès* n1Tout ce que vous faites changera également la valeur de a dans la fonction main(). De même, b aura la même valeur que* n2mêmes valeurs.