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

C Call Address



C ++ é uma linguagem de programação flexível de propósito 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, ou seja, 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 o que é 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 de 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:



inteu= 100;
int *ptr= Eeu;

Aqui, a primeira instruçã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, ou seja, ptr, e inicializando-a 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:

intpara= 200;
int Er=para;

Neste exemplo, declaramos um inteiro, ou seja, a e, em seguida, declaramos 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 Call by address posteriormente neste artigo.

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

No método Chamada por referência / Passagem por referência, 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. Na 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, ou seja, 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 namespacehoras;

vazioOlá(int *p)
{
custo <<endl<< 'Dentro da função hello ():' <<endl;
custo << 'Valor de * p =' << *p<<endl;
*p= 200;
custo << 'Valor de * p =' << *p<<endl;
custo << 'Saindo da função hello ().' <<endl;
}

inta Principal()
{
intOnde= 100;
custo << 'Valor de var dentro da função main () =' <<Onde<<endl;

Olá(EOnde);

custo <<endl<< 'Valor de var dentro da função main () =' <<Onde<<endl;

Retorna 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 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 () depois que a função mySwap () é executada.

#incluir
usando namespacehoras;

vaziomySwap(int *vptr_1,int *vptr_2)
{
inttemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

inta Principal()
{
intvar_1= 100;
intvar_2= 300;

custo << 'Antes de chamar a função mySwap (), valor de var_1:' <<var_1<<endl;
custo << 'Antes de chamar a função mySwap (), valor de var_2:' <<var_2<<endl<<endl;

custo << 'Chamando a função mySwap () - Chamada por endereço.' <<endl<<endl;
mySwap(Evar_1,Evar_2);

custo << 'Depois de chamar a função mySwap (), valor de var_1:' <<var_1<<endl;
custo << 'Depois de chamar a função mySwap (), valor de var_2:' <<var_2<<endl;

Retorna 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 (ou seja, p), podemos alterar o valor do parâmetro real (var) dentro da função main ().

#incluir
usando namespacehoras;

vazioOlá(int Ep)
{
custo <<endl<< 'Dentro da função hello ():' <<endl;
custo << 'Valor de p =' <<p<<endl;
p= 200;
custo << 'Valor de p =' <<p<<endl;
custo << 'Saindo da função hello ().' <<endl;
}

inta Principal()
{
intOnde= 100;
custo << 'Valor de var dentro da função main () =' <<Onde<<endl;

Olá(Onde);

custo <<endl<< 'Valor de var dentro da função main () =' <<Onde<<endl;

Retorna 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 namespacehoras;

vaziomySwap(int Evref_1,int Evref_2)
{
inttemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

inta Principal()
{
intvar_1= 100;
intvar_2= 300;

custo << 'Antes de chamar a função mySwap (), valor de var_1:' <<var_1<<endl;
custo << 'Antes de chamar a função mySwap (), valor de var_2:' <<var_2<<endl<<endl;

custo << 'Chamando a função mySwap () - Chamada por referência.' <<endl<<endl;
mySwap(var_1, var_2);

custo << 'Depois de chamar a função mySwap (), valor de var_1:' <<var_1<<endl;
custo << 'Depois de chamar a função mySwap (), valor de var_2:' <<var_2<<endl;

Retorna 0;
}

Conclusão

Compreender os métodos de passagem de parâmetros em C ++ é muito importante. 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 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 integrados.