C ++ é uma linguagem de programação flexível de uso geral. Foi originalmente criado por Bjarne Stroustrup, um cientista da computação dinamarquês, em 1985. C ++ suporta métodos de passagem de três parâmetros, i.e., chamada por valor, chamada por endereço e chamada por referência. Neste artigo, vamos discutir sobre o mecanismo de chamada por endereço e chamada por referência.
O que é uma função?
Antes de pularmos para o tópico real, precisamos entender qual é a função em C++. Muitos de vocês já devem estar familiarizados com as funções.
Uma função é basicamente um pedaço de código que pode ser usado para realizar uma determinada tarefa. Uma função é usada principalmente para reduzir o código repetitivo em um programa C ++. Ele recebe a entrada como parâmetros e retorna a saída como um valor de retorno. Se definirmos a função uma vez, podemos chamá-la / usá-la várias vezes na parte posterior do nosso programa. Dessa forma, salvamos muito código repetitivo no programa.
Todo programa C ++ deve ter a função “main ()”. A função “main ()” é o ponto de entrada para um programa C ++. Além da função “main ()”, o programador pode definir quantas funções quiser.
Esta é a sintaxe para definir uma função:
Return_type Function_Name (lista de parâmetros de entrada)A função em C ++ pode aceitar 0 ou mais parâmetros de entrada, enquanto pode retornar apenas um valor de retorno.
O que é endereço?
Existem dois tipos de variáveis em C ++ (semelhantes à linguagem C) - Variável de dados e Variável de endereço. A variável de endereço é usada para armazenar o endereço de outra variável de dados. Por exemplo, vamos considerar o seguinte snippet de código:
int i = 100;int * ptr = & i;
Aqui, a primeira declaração nos diz que a variável "i" é uma variável de dados e está armazenando o valor 100. Na segunda instrução, estamos declarando uma variável de ponteiro, i.e. “Ptr” e inicializando-o com o endereço da variável “i”.
O que é referência?
A referência é outro recurso poderoso da linguagem C ++. Vamos considerar o seguinte snippet de código:
int a = 200;int & r = a;
Neste exemplo, declaramos um inteiro, i.e. “A” e, em seguida, declarou uma variável de referência “r”, que é inicializada com o valor de “a”. Portanto, a variável de referência nada mais é do que um apelido de outra variável.
Métodos de passagem de parâmetros:
Existem três tipos de métodos de passagem de parâmetros na linguagem C ++:
- Chamada por valor / Passagem por valor
- Chamada por endereço / Endereço de passagem
- Chamada por referência / Passe por referência
Neste artigo, estamos discutindo sobre a - Chamada por endereço e Chamada por referência.
O que é endereço de chamada / endereço de passagem?
No caso do método Call by address / Pass by address, os argumentos da função são passados como endereço. A função do chamador passa o endereço dos parâmetros. Variáveis de ponteiro são usadas na definição da função. Com a ajuda do método Call by address, a função pode acessar os parâmetros atuais e modificá-los. Veremos um exemplo do método de chamada por endereço posteriormente na seção deste artigo.
O que é chamada por referência / passagem por referência?
No método Call by reference / Pass by reference, os parâmetros da função são passados como referência. Dentro da definição da função, os parâmetros reais são acessados usando a variável de referência.
Exemplos:
Agora, uma vez que entendemos o conceito de métodos de passagem de parâmetro, veremos vários programas de exemplo para entender o mecanismo de passagem de parâmetro em C ++:
- Exemplo-1 - Chamada por endereço (1)
- Exemplo-2 - Chamada por endereço (2)
- Exemplo-3 - Chamada por referência (1)
- Exemplo-4 - Chamada por referência (2)
Os primeiros dois exemplos são dados para explicar como o método Call by address funciona em C++. Os dois últimos exemplos são para explicar o conceito de Chamada por Referência.
Exemplo-1 - Chamada por endereço (1)
Neste exemplo, vamos demonstrar o mecanismo de chamada por endereço. A partir da função “main ()”, estamos chamando a função “hello ()” e passando o endereço de “var”. Na definição da função, estamos recebendo o endereço de “var” em uma variável de ponteiro, i.e., “P”. Dentro da função hello, o valor de “var” está sendo alterado para 200 com a ajuda do ponteiro. Portanto, o valor de "var" está sendo alterado para 200 dentro da função "main ()" após a chamada da função "hello ()".
#incluirusando namespace std;
void hello (int * p)
cout << endl << "Inside hello() function : " << endl;
cout << "Value of *p = " << *p << endl;
* p = 200;
cout << "Value of *p = " << *p << endl;
cout << "Exiting hello() function." << endl;
int main ()
int var = 100;
cout << "Value of var inside main() function = " << var << endl;
olá (& var);
cout << endl << "Value of var inside main() function = " << var << endl;
return 0;
Exemplo-2 - Chamada por endereço (2)
Este é outro exemplo do método de chamada por endereço. Neste exemplo, vamos explicar como o método call by address pode ser usado para resolver um problema da vida real. Por exemplo, queremos escrever uma função para trocar duas variáveis. Se usarmos o mecanismo de chamada por valor para trocar duas variáveis, as variáveis reais não serão trocadas na função do chamador. O método de chamada por endereço pode ser usado em tal cenário. Neste exemplo, estamos passando o endereço de ambos var_1 (& var_1) e var_2 (& var_2) para a função “mySwap ()”. Dentro da função “mySwap ()”, estamos trocando os valores dessas duas variáveis com a ajuda dos ponteiros. Como você pode ver na saída abaixo, o valor real dessas variáveis está sendo trocado na função “main ()” após a função “mySwap ()” ser executada.
#incluirusando namespace std;
void mySwap (int * vptr_1, int * vptr_2)
int temp_var;
temp_var = * vptr_1;
* vptr_1 = * vptr_2;
* vptr_2 = temp_var;
int main ()
int var_1 = 100;
int var_2 = 300;
cout << "Before calling mySwap() function, value of var_1 : " << var_1 << endl;
cout << "Before calling mySwap() function, value of var_2 : " << var_2 << endl << endl;
cout << "Calling mySwap() function - Call by address." << endl << endl;
mySwap (& var_1, & var_2);
cout << "After calling mySwap() function, value of var_1 : " << var_1 << endl;
cout << "After calling mySwap() function, value of var_2 : " << var_2 << endl;
return 0;
Exemplo-3 - Chamada por referência (1)
Neste exemplo, vamos demonstrar como a chamada por referência funciona em C++. Na definição da função “hello ()”, o valor está sendo recebido como uma variável de referência (& p). Com a ajuda da variável de referência (i.e., p), podemos alterar o valor do parâmetro real (var) dentro da função “main ()”.
#incluirusando namespace std;
void hello (int & p)
cout << endl << "Inside hello() function : " << endl;
cout << "Value of p = " << p << endl;
p = 200;
cout << "Value of p = " << p << endl;
cout << "Exiting hello() function." << endl;
int main ()
int var = 100;
cout << "Value of var inside main() function = " << var << endl;
olá (var);
cout << endl << "Value of var inside main() function = " << var << endl;
return 0;
Exemplo-4 - Chamada por referência (2)
Este é outro exemplo de uma chamada por referência. Neste exemplo, vamos demonstrar como a chamada por referência funciona em C ++ com a ajuda de um exemplo do mundo real. A função “mySwap ()” é chamada a partir da função “main ()” com os seguintes parâmetros - var_1 e var_2. Dentro da função “mySwap ()”, estamos recebendo os parâmetros como variáveis de referência.
#incluirusando namespace std;
void mySwap (int & vref_1, int & vref_2)
int temp_var;
temp_var = vref_1;
vref_1 = vref_2;
vref_2 = temp_var;
int main ()
int var_1 = 100;
int var_2 = 300;
cout << "Before calling mySwap() function, value of var_1 : " << var_1 << endl;
cout << "Before calling mySwap() function, value of var_2 : " << var_2 << endl << endl;
cout << "Calling mySwap() function - Call by reference." << endl << endl;
mySwap (var_1, var_2);
cout << "After calling mySwap() function, value of var_1 : " << var_1 << endl;
cout << "After calling mySwap() function, value of var_2 : " << var_2 << endl;
return 0;
Conclusão
Compreender os métodos de passagem de parâmetros em C++ é muito crucial. A linguagem de programação C suporta Call by value e Call by address apenas. Mas, C ++ oferece suporte a Chamada por referência junto com os dois mecanismos anteriores. Neste artigo, vimos vários exemplos de trabalho para compreender o conceito de chamada por endereço e chamada por referência. Chamada por endereço é um método muito poderoso e popular em aplicativos de domínio incorporado.