PiR2
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Passagem de argumentos por referência

2 participantes

Ir para baixo

Passagem de argumentos por referência Empty Passagem de argumentos por referência

Mensagem por Fis_física Qui 12 maio 2016, 11:42

Quando eu chamo uma função, o controle é passado a ela, e sendo feita uma passagem de argumento por referência e havendo, em seguida, uma alteração nas variáveis locais da função, o argumentos passados (variáveis da chamada da função) tbm são alterados. Mas quando o controle volta ao ponto de onde ocorreu a interrupção pq essa alteração tem efeito aqui tbm ? Isto é, se a alteração foi feita em outra função, não tem a questão do escopo ? Pq eu imaginava q voltando aqui, as variáveis declaradas aqui (variáveis da chamada da função) não seriam alteradas por causa do escopo. Isso ocorre por causa da mudança na memória, nos endereços das variáveis ?

Fis_física
Iniciante

Mensagens : 40
Data de inscrição : 18/12/2015
Idade : 25
Localização : São Paulo

Ir para o topo Ir para baixo

Passagem de argumentos por referência Empty Re: Passagem de argumentos por referência

Mensagem por PedroX Sáb 14 maio 2016, 23:36

Existem duas formas de passar valores. Você pode passá-los diretamente ou passar o endereço na memória das variáveis que guardam esse valor.

Por exemplo:

Código:
int somaumemultiplica(int p1, int p2) //as variáveis recebem um valor
{
p1 += 1; //está mudando o valor da variável local p1 desta função
p2 += 1; //está mudando o valor da variável local p2 desta função

return p1*p2;
}

int modificaemultiplica(int *p1, int *p2) //asterisco indica que quer um endereço, não um valor
{
*p1 += 1; //está mudando o valor da variável local p1 de main
*p2 += 1; //está mudando o valor da variável local p2 de main

return (*p1)*(*p2);
}

void main()
{
int p1=2, p2=5;
int resultado = somaumemultiplica(p1, p2);
printf("%d", resultado); // retorna 18 que é 3x6
printf("%d", p1); // 2
printf("%d", p2); // 5

int resultado2 = modificaemultiplica(&p1, &p2); //& passa o endereço da variável
printf("%d", resultado2); // retorna 18 que é 3x6
printf("%d", p1); // 3
printf("%d", p2); // 6
}
PedroX
PedroX
Administração
Administração

Mensagens : 1040
Data de inscrição : 24/08/2011
Idade : 28
Localização : Campinas - SP

Ir para o topo Ir para baixo

Passagem de argumentos por referência Empty Re: Passagem de argumentos por referência

Mensagem por Fis_física Qua 18 maio 2016, 13:12

:tiv:

Fis_física
Iniciante

Mensagens : 40
Data de inscrição : 18/12/2015
Idade : 25
Localização : São Paulo

Ir para o topo Ir para baixo

Passagem de argumentos por referência Empty Re: Passagem de argumentos por referência

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos