C ++

C ++ Chamada por Endereço e Chamada por Referência

C ++ Chamada por Endereço e Chamada por Referência

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 ++:

  1. Chamada por valor / Passagem por valor
  2. Chamada por endereço / Endereço de passagem
  3. 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 ++:

  1. Exemplo-1 - Chamada por endereço (1)
  2. Exemplo-2 - Chamada por endereço (2)
  3. Exemplo-3 - Chamada por referência (1)
  4. 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 ()".

#incluir
usando 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.

#incluir
usando 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 ()”.

#incluir
usando 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.

#incluir
usando 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.

Melhores jogos de linha de comando para Linux
A linha de comando não é apenas sua maior aliada ao usar o Linux - ela também pode ser uma fonte de entretenimento porque você pode usá-la para jogar ...
Melhores aplicativos de mapeamento de gamepad para Linux
Se você gosta de jogar no Linux com um gamepad em vez de um teclado típico e sistema de entrada de mouse, existem alguns aplicativos úteis para você. ...
Ferramentas úteis para jogadores de Linux
Se você gosta de jogar no Linux, é provável que tenha usado aplicativos e utilitários como Wine, Lutris e OBS Studio para melhorar a experiência de jo...