English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Tutoriel de base

C++ Contrôle de flux

C++ Fonction

C++ Tableau & chaîne de caractères

C++ Structure de données

C++ Classe et objet

C++ Pointeur

C++ Héritage

C++ STL Tutoriel

C++ Manuel de référence

C++ Pointeurs et fonctions

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.

Exemple1:Passage de référence sans pointeur

#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.

Exemple2:Passage de référence par pointeur

#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.