• Olá Visitante, se gosta do forum e pretende contribuir com um donativo para auxiliar nos encargos financeiros inerentes ao alojamento desta plataforma, pode encontrar mais informações sobre os várias formas disponíveis para o fazer no seguinte tópico: leia mais... O seu contributo é importante! Obrigado.

Referências Apontadores

Serr@no™

GF Ouro
Membro Inactivo
Entrou
Set 23, 2006
Mensagens
1,690
Gostos Recebidos
0
Uma referência é a "morada" de uma certa variável na memória. Quando fazemos int i; estamos a criar uma variável que ficará alojada algures. A sua referência é o seu endereço na memória e define-se com o caractér '&' antes do seu nome.
#include <iostream>
using namespace std;
// demonstração do uso de referências
int main()
{
int i;
int &i_ref = i; // i_ref irá conter o endereço na memória da variável i
// a partir de agora pode-se afectar o conteúdo de i com i_ref


cout<< i <<" = "<< i_ref <<endl;
cout<<"Incrementar... o i"<<endl;
++i;


cout<< i <<" = "<< i_ref <<endl;
cout<<"Incrementar... o i_ref"<<endl;
++i_ref;


cout<< i <<" = "<< i_ref <<endl;


cin.get();
return 0;
}
Pelo que se vê, uma referência é uma variável com outro nome para o mesmo endereço. É como se i e i_ref fossem a mesma coisa, e na prática até são. Então qual a utilidade das referências? As referências tomam especial importância no tratamento de funções, pois se quando passávamos um argumento por valor, havia uma cópia deste, agora podemos passar a sua referência.
#include <iostream>
using namespace std;


// troca o conteúdo de duas variáveis inteiras
void swap( int &a, int &b )
{
int temp = a; // para não se perder o valor de a
a = b;
b = temp;
}


int main()
{
int num1 = 1;
int num2 = 2;


cout<<"Numero 1 = "<< num1 <<" - Numero 2 = "<< num2 << endl;
cout<<"Swap..."<<endl;
swap(num1,num2);
cout<<"Numero 1 = "<< num1 <<" - Numero 2 = "<< num2 << endl;


cin.get();
return 0;
}
Ao passar os parâmetros, é passava a sua referência, pelo que é como se estivéssemos a trabalhar com as próprias variáveis num1 e num2;
 

Serr@no™

GF Ouro
Membro Inactivo
Entrou
Set 23, 2006
Mensagens
1,690
Gostos Recebidos
0
Apontadores

Parece que os apontadores são uma dor de cabeça para todo aquele que começa a aprender C/C++ e alguns autores dizem que é por causa dos apontadores que existe a maior parte de erros nos programas.
Seja como for o apontador é uma parte do C/C++ e deve-se aprender a trabalhar com ela, tal como nas outras, até porque dá muito jeito.
Se à bocado falávamos do endereço das variáveis, agora falamos dos apontadores para elas. Um apontador é uma variável que aponta para uma referência e declara-se com um '*' antes do nome.
#include <iostream>
using namespace std;


int main()
{
int i = 10;
int *p = &i;


// para aceder ao conteúdo apontado por um apontador
// usa-se o operador desreferência *
cout<< *p ;


cin.get();
return 0;
}
A seguir falaremos de memória dinamica e mostrarei um bom uso para os apontadores.
 
Topo