Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Chamada C++ por referência:usando ponteiros [com exemplos]

Chamada C++ por referência:usando ponteiros [com exemplos]


Neste tutorial, aprenderemos sobre a chamada C++ por referência para passar ponteiros como argumento para a função com a ajuda de exemplos.

No tutorial de Funções C++, aprendemos sobre como passar argumentos para uma função. Esse método usado é chamado de passagem por valor porque o valor real é passado.

No entanto, há outra maneira de passar argumentos para uma função em que os valores reais dos argumentos não são passados. Em vez disso, a referência aos valores é passada.

Por exemplo,

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

Observe o & em void func2(int &numRef) . Isso denota que estamos usando o endereço da variável como nosso parâmetro.

Então, quando chamamos o func2() função em main() passando a variável num como argumento, estamos passando o endereço de num variável em vez do valor 5 .

Exemplo 1:passando por referência sem ponteiros

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

Saída
Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

Neste programa, passamos as variáveis ​​a e b para o swap() função. Observe a definição da função,
void swap(int &n1, int &n2)



Aqui, estamos usando & para denotar que a função aceitará endereços como seus parâmetros.

Assim, o compilador pode identificar que em vez de valores reais, a referência das variáveis ​​é passada para os parâmetros da função.

No swap() função, os parâmetros da função n1 e n2 estão apontando para o mesmo valor que as variáveis ​​a e b respectivamente. Portanto, a troca ocorre no valor real.

A mesma tarefa pode ser feita usando os ponteiros. Para saber mais sobre ponteiros, visite Ponteiros C++.

Exemplo 2:passando por referência usando ponteiros

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

Saída
Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

Aqui, podemos ver que a saída é a mesma do exemplo anterior. Observe a linha,
// &a is address of a
// &b is address of b
swap(&a, &b);

Aqui, o endereço da variável é passado durante a chamada da função em vez da variável.

Como o endereço é passado em vez do valor, um operador de desreferência * deve ser usado para acessar o valor armazenado nesse endereço.
temp = *n1;
*n1 = *n2;
*n2 = temp;

*n1 e *n2 dá o valor armazenado no endereço n1 e n2 respectivamente.

Desde n1 e n2 conter os endereços de a e b , tudo é feito para *n1 e *n2 irá alterar os valores reais de a e b .

Portanto, quando imprimimos os valores de a e b no main() função, os valores são alterados.

Linguagem C

  1. C# usando
  2. Operadores C++
  3. Comentários C++
  4. Modelos de classe C++
  5. Ponteiros C
  6. Ponteiros C++ com exemplos
  7. 13 tipos diferentes de malware em 2021 [com exemplos]
  8. 5 tipos diferentes de data center [com exemplos]
  9. 8 tipos diferentes de tecnologia em 2021 [com exemplos]
  10. C - Ponteiros