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