Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C++ Call by Reference:pointers gebruiken [met voorbeelden]

C++ Call by Reference:Pointers gebruiken [Met voorbeelden]

In deze zelfstudie leren we over C++-aanroep door te verwijzen naar pointers als argument voor de functie met behulp van voorbeelden.

In de C++ Functions-tutorial hebben we geleerd over het doorgeven van argumenten aan een functie. Deze gebruikte methode wordt waarde doorgeven genoemd omdat de werkelijke waarde wordt doorgegeven.

Er is echter een andere manier om argumenten door te geven aan een functie waarbij de werkelijke waarden van argumenten niet worden doorgegeven. In plaats daarvan wordt de verwijzing naar waarden doorgegeven.

Bijvoorbeeld,

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

Let op de & in void func2(int &numRef) . Dit geeft aan dat we het adres van de variabele als onze parameter gebruiken.

Dus, als we de func2() functie in main() door de variabele num . door te geven als argument geven we eigenlijk het adres door van num variabele in plaats van de waarde 5 .


Voorbeeld 1:Verwijzing doorgeven zonder verwijzingen

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

Uitvoer

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

In dit programma hebben we de variabelen a . doorgegeven en b naar de swap() functie. Let op de functiedefinitie,

void swap(int &n1, int &n2)

Hier gebruiken we & om aan te geven dat de functie adressen als parameters accepteert.

Daarom kan de compiler vaststellen dat in plaats van werkelijke waarden de referentie van de variabelen wordt doorgegeven aan functieparameters.

In de swap() functie, de functieparameters n1 en n2 wijzen naar dezelfde waarde als de variabelen a en b respectievelijk. De ruil vindt dus plaats op werkelijke waarde.

Dezelfde taak kan worden gedaan met behulp van de aanwijzers. Ga voor meer informatie over pointers naar C++ Pointers.


Voorbeeld 2:Verwijzing doorgeven met behulp van pointers

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

Uitvoer

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

Hier kunnen we zien dat de uitvoer hetzelfde is als in het vorige voorbeeld. Let op de lijn,

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

Hier wordt het adres van de variabele doorgegeven tijdens de functieaanroep in plaats van de variabele.

Aangezien het adres wordt doorgegeven in plaats van de waarde, wordt een dereferentie-operator * moet worden gebruikt om toegang te krijgen tot de waarde die op dat adres is opgeslagen.

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

*n1 en *n2 geeft de waarde die is opgeslagen op adres n1 en n2 respectievelijk.

Sinds n1 en n2 bevatten de adressen van a en b , alles wordt gedaan om *n1 en *n2 zal de werkelijke waarden van a . veranderen en b .

Dus als we de waarden van a . afdrukken en b in de main() functie, worden de waarden gewijzigd.


C Taal

  1. C# met behulp van
  2. C++-operators
  3. C++ Opmerkingen
  4. C++-klassesjablonen
  5. C-aanwijzers
  6. C++-aanwijzers met voorbeelden
  7. 13 verschillende soorten malware in 2021 [Met voorbeelden]
  8. 5 verschillende soorten datacenters [met voorbeelden]
  9. 8 verschillende soorten technologie in 2021 [Met voorbeelden]
  10. C - Aanwijzers
  11. C++-overzicht