Ir ao conteúdo
  • Cadastre-se
nanquinote

Referência na chama de função

Recommended Posts

Olá,

 

Por que a chamada de função do 1o. exemplo só funciona se eu passar o argumento como referência e a do o segundo exemplo funciona passando o argumento como valor?

 

1:

#include <iostream>
using namespace std;

void doubleIt(int*); 

int main(){
	int num;

	cout << "Insira numero: ";
	cin >> num;

	doubleIt(&num); //REFERÊNCIA OBRIGATÓRIA, POR QUÊ??
	cout << "\nDobro na Main = " << num << endl;
	return 0;
}

void doubleIt(int* x){
	cout << "\nNumero antes do dobro: " << *x << endl;
	*x *=2;
	cout << "\nNumero dobrado pela funcao: " << *x << endl;
}

2:

 

#include <iostream>
using namespace std;

int swap(int*, int*);

int main(){
	int primeiro = 1;
	int segundo = 2;
	swap(primeiro, segundo); //SEM REFERÊNCIA
	cout << "\n\n" << primeiro << " " << segundo << endl;
}

int swap(int *x, int *y){
	int temp;
	temp = *x;
	*x = *y;
	*y = temp;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em ambos os casos você deve ouvir um alerta

Ainda sim vai copilar mesmo com alertas e tudo.

 

Interessante ressaltar que, quando passamos argumentos em parâmetros de tipos semelhantes

acontece o cast automático de valor, falando do segundo caso o programa entende 1 e 2 como sendo os locais na memória, bem se estes locais não são usados nada ocorrerá, caso contrário haverá acesso violado à memória, e trava tudo.

Editado por Mauro Britivaldo
explicacao
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×