Chamada C ++ por endereço e chamada por referência

Chamada C ++ por endereço e chamada por referência
C ++ é uma linguagem de programação de uso geral flexível. Foi criado originalmente por Bjarne Stroustrup, um cientista dinamarquês de computação, em 1985. C ++ suporta métodos de passagem de três parâmetros, i i.e., Ligue por valor, ligue por endereço e ligue 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 entrarmos no tópico real, precisamos entender qual é a função em C++. Muitos de vocês já podem estar familiarizados com as funções.

Uma função é basicamente um pedaço de código que pode ser usado para executar uma determinada tarefa. Uma função é usada principalmente para reduzir o código repetitivo em um programa C ++. É necessário a entrada como parâmetros e retorna a saída como um valor de retorno. Se definirmos a função uma vez, podemos ligar/usá -la várias vezes na parte posterior do nosso programa. Dessa forma, economizamos muito código repetitivo no programa.

Cada 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 quiserem.

Aqui está a sintaxe de definir uma função:

Return_type function_name (lista de parâmetros de entrada)

A função em C ++ pode aceitar 0 ou mais número de parâmetros de entrada, enquanto pode retornar apenas um valor de retorno.

O que é endereço?

Existem dois tipos de variáveis ​​em C ++ (semelhante à 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 declaração, estamos declarando uma variável de ponteiro, eu.e. "PTR", e inicializando com o endereço da variável "eu".

O que é referência?

A referência é outra característica poderosa da linguagem C ++. Vamos considerar o seguinte snippet de código:

int a = 200;
int & r = a;

Neste exemplo, declaramos um número inteiro, eu.e. "A" e depois declarou uma variável de referência "r", que é inicializada com o valor de "a". Portanto, a variável de referência não passa de um alias 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. Ligue por valor / passagem por valor
  2. Ligue por endereço / passagem por endereço
  3. Ligue por referência / passagem por referência

Neste artigo, estamos discutindo sobre o - Chamada por endereço e chamada por referência.

O que é chamado por endereço / passagem por endereço?

No caso da chamada por endereço / passagem por método de endereço, os argumentos da função são passados ​​como endereço. A função do chamador passa o endereço dos parâmetros. As variáveis ​​de ponteiro são usadas na definição da função. Com a ajuda do método de chamada por endereço, a função pode acessar os parâmetros reais e modificá -los. Veremos um exemplo do método de chamada por endereço posterior seção deste artigo.

O que é chamado por referência / passagem por referência?

Na chamada por método de referência / passagem por referência, os parâmetros de função são passados ​​como uma 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, como entendemos o conceito de métodos de passagem de parâmetros, veremos vários programas de exemplo para entender o mecanismo de passagem de parâmetros em C ++:

  1. Exemplo 1 - Ligue por endereço (1)
  2. Exemplo 2 - Ligue por endereço (2)
  3. Exemplo -3 - Ligue por referência (1)
  4. Exemplo -4 - Ligue por referência (2)

Os dois primeiros exemplos são dados para explicar como o método de chamada por endereço funciona em c++. Os dois últimos exemplos são explicar a chamada por conceito de referência.

Exemplo 1 - Ligue por endereço (1)

Neste exemplo, vamos demonstrar a chamada por mecanismo de endereço. 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 Olá, 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 de 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;
retornar 0;

Exemplo 2 - Ligue por endereço (2)

Este é outro exemplo do método de chamada por endereço. Neste exemplo, vamos explicar como o método de chamada por endereço pode ser usado para resolver um problema da vida real. Por exemplo, queremos escrever uma função para trocar duas variáveis. Se usarmos a chamada por mecanismo de valor para trocar duas variáveis, as variáveis ​​reais não serão trocadas na função de chamadas. O método de chamada por endereço pode ser usado nesse cenário. Neste exemplo, estamos passando o endereço de 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 ()" é 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;
cout << "Calling mySwap() function - Call by address." << 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;
retornar 0;

Exemplo -3 - Ligue 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), somos capazes de 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;
retornar 0;

Exemplo -4 - Ligue por referência (2)

Este é outro exemplo de 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 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;
cout << "Calling mySwap() function - Call by reference." << 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;
retornar 0;

Conclusão

Compreender os métodos de passagem de parâmetros em C ++ é muito crucial. A linguagem de programação C suporta a chamada por valor e chamada apenas por endereço. Mas, C ++ suporta chamadas por referência junto com os dois mecanismos anteriores. Neste artigo, vimos vários exemplos de trabalho para entender 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 incorporados.