Neste tutorial, aprenderemos sobre a chamada C ++ por referência para passar ponteiros como um 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. Este 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.
Portanto, quando chamamos a func2()
função main()
passando a variável num como um argumento, estamos na verdade passando o endereço da variável num em vez do valor 5 .

Exemplo 1: passagem por referência sem ponteiros
#include 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 << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; )
Resultado
Antes de trocar a = 1 b = 2 Depois de trocar a = 2 b = 1
Neste programa, passamos as variáveis aeb para a 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.
Portanto, o compilador pode identificar que, em vez dos valores reais, a referência das variáveis é passada para os parâmetros da função.
Na 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: passagem por referência usando ponteiros
#include 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 << "After 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; )
Resultado
Antes de trocar a = 1 b = 2 Depois de trocar 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 naquele endereço.
temp = *n1; *n1 = *n2; *n2 = temp;
*n1
e *n2
fornece o valor armazenado no endereço n1 e n2, respectivamente.
Como n1 e n2 contêm os endereços de a e b, tudo é feito para *n1
e * n2 mudará os valores reais de a e b.
Portanto, quando imprimimos os valores de aeb na main()
função, os valores são alterados.