Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C++ Call by Reference:Zeiger verwenden [mit Beispielen]

C++ Call by Reference:Zeiger verwenden [mit Beispielen]

In diesem Tutorial erfahren wir anhand von Beispielen, wie C++ Call by Reference funktioniert, um Zeiger als Argument an die Funktion zu übergeben.

Im Lernprogramm zu C++-Funktionen haben wir gelernt, wie man Argumente an eine Funktion übergibt. Diese verwendete Methode wird Wertübergabe genannt, da der eigentliche Wert übergeben wird.

Es gibt jedoch eine andere Möglichkeit, Argumente an eine Funktion zu übergeben, bei der die tatsächlichen Werte der Argumente nicht übergeben werden. Stattdessen wird der Verweis auf Werte übergeben.

Zum Beispiel

// 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;
}

Beachten Sie den & in void func2(int &numRef) . Dies bedeutet, dass wir die Adresse der Variablen als unseren Parameter verwenden.

Wenn wir also func2() aufrufen Funktion in main() indem Sie die Variable num übergeben als Argument übergeben wir tatsächlich die Adresse von num Variable anstelle des Wertes 5 .


Beispiel 1:Referenzübergabe ohne Zeiger

#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;
}

Ausgabe

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

In diesem Programm haben wir die Variablen a übergeben und b bis swap() Funktion. Beachten Sie die Funktionsdefinition,

void swap(int &n1, int &n2)

Hier verwenden wir & um anzuzeigen, dass die Funktion Adressen als Parameter akzeptiert.

Daher kann der Compiler erkennen, dass anstelle von tatsächlichen Werten die Referenz der Variablen an Funktionsparameter übergeben wird.

Im swap() Funktion, die Funktionsparameter n1 und n2 zeigen auf denselben Wert wie die Variablen a und b beziehungsweise. Daher erfolgt das Tauschen auf Istwert.

Die gleiche Aufgabe kann mit den Zeigern durchgeführt werden. Weitere Informationen zu Zeigern finden Sie unter C++-Zeiger.


Beispiel 2:Referenzübergabe mit Zeigern

#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;
}

Ausgabe

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

Hier können wir sehen, dass die Ausgabe die gleiche ist wie im vorherigen Beispiel. Beachten Sie die Zeile,

// &a is address of a
// &b is address of b
swap(&a, &b);

Hier wird beim Funktionsaufruf nicht die Variable, sondern die Adresse der Variablen übergeben.

Da statt Wert die Adresse übergeben wird, ein Dereferenzierungsoperator * muss verwendet werden, um auf den in dieser Adresse gespeicherten Wert zuzugreifen.

temp = *n1;
*n1 = *n2;
*n2 = temp;

*n1 und *n2 gibt den unter der Adresse n1 gespeicherten Wert an und n2 bzw..

Seit n1 und n2 enthalten die Adressen von a und b , irgendetwas wird mit *n1 gemacht und *n2 ändert die tatsächlichen Werte von a und b .

Wenn wir also die Werte von a drucken und b im main() Funktion werden die Werte geändert.


C Sprache

  1. C# verwenden
  2. C++-Operatoren
  3. C++-Kommentare
  4. C++-Klassenvorlagen
  5. C-Zeiger
  6. C++-Zeiger mit Beispielen
  7. 13 verschiedene Arten von Malware im Jahr 2021 [mit Beispielen]
  8. 5 verschiedene Arten von Rechenzentren [mit Beispielen]
  9. 8 verschiedene Arten von Technologien im Jahr 2021 [mit Beispielen]
  10. C - Zeiger