Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

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

  1. C# en utilisant
  2. Opérateurs C++
  3. Commentaires C++
  4. Modèles de classe C++
  5. Pointeurs C
  6. Pointeurs C++ avec exemples
  7. 13 types de logiciels malveillants différents en 2021 [avec exemples]
  8. 5 types de centres de données différents [avec exemples]
  9. 8 types de technologies différents en 2021 [avec exemples]