Ir para conteúdo
Entre para seguir isso  
Dark Skyllen

#7~1 - Ponteiros

Recommended Posts

Dark Skyllen    7
Dark Skyllen

Aula 7 - Ponteiros

 

 

Com certeza a aula que trará muitas dúvidas e problemas. Primeiramente gostaria de dizer que pra entender ponteiros, terá de ler a aula com muita atenção e se esforçar, porquê são realmente complicadinhos de entender.

 

 

  • O que são ponteiros?

Antes de mais nada, precisamos entender como funcionam as variáveis:

Quando são declaradas elas ocupam um espaço de memória, onde cada um, terá uma identificação. E essas variáveis permanecerão nesse endereço de memória até que sejam liberadas.

 

Exemplo:

Ao declararmos a variavel X, ela ocupará a posição: 00ffx7891 da memória (só um exemplo) e quando alteramos o valor da variável a posição de X passa a ter o valor que será alocado na posição da memória.. Para entenderem melhor colem isso no DevC++:

 


#include <iostream.h>

int main()
{
int minhaVar = 10;
cout << &minhaVar;
system("pause>null");
}

Ao executarem o programa verão que o escrito na tela não é 10, é o endereço de memória da variável minhaVar. Então para mostrarmos o endereço onde uma variável está alocada, usamos o caractere &.

 

 

 

  • Utilizando ponteiros

 

Mas o que ponteiros tem a ver com isso?

 

Tudo! São esses ponteiros que são responsáveis por guardarem o endereço de uma variável.

Ponteiros são variáveis também que são declaradas com um * antes do seu nome e essas devem ser inicializadas com 0 ou com algum valor, para não ocorrer futuros erros.

 


#include <iostream.h>

int main()
{
int minhaVar = 10;
int* pMinhaVar = &minhaVar; //Declara o ponteiro e já recebe o endereço de memória da minhaVar.
cout << pMinhaVar;
system("pause>null");
}

Exemplo simples de declaração de ponteiros. Ao declarmos ele, fizemos ele apontar para o endereço de memória. Ou seja, as duas variáveis agora podem alterar os valores que estão naquele endereço de memória.

 

Mas existem 3 retornos diferentes para uma variável ponteiro. Ela pode retornar o endereço de memória em que está apontando, pode retornar o valor que está nesse endereço de memória e pode retorna o endereço de memória em que a variável ponteiro está..

 

Vejam:

 


#include <iostream.h>

int main()
{
// Endereço de minhaVar = 00xff078 (ilustrativo)
// Endereço de *pMinhaVar = 00xff079 (ilustrativo)

int minhaVar = 10;
int* pMinhaVar = &minhaVar;
cout << pMinhaVar << endl; // Vai retornar 00xff078 -- onde está alocado minhaVar
cout << *pMinhaVar << endl; // Vai retornar 10 -- valor que esta em 00xff078
cout << &pMinhaVar << endl; // Vai retornar 00xff079 -- onde a variavel *pMinhaVar está alocada
system("pause>null");
}

Por apontar para um endereço ja ocupado, quando receberem valores alocaram esses valores nos endereços de memória em que apontam. Vejam o exemplo:

 

#include <iostream.h>

int main()
{   
   // Endereço de minhaVar = 00xff074 (ilustrativo)
   // Endereço de *pMinhaVar = 00xff077 (ilustrativo)

   int minhaVar = 10;
   int* pMinhaVar = &minhaVar;
   *pMinhaVar = 30;
   cout << *pMinhaVar << endl;
   cout << minhaVar;
   system("pause>null");
}

minhaVar passará a ser 30 pois o valor do endereço de memória que ela está foi alterado pela variável *pMinhaVar que aponta para este endereço.

 

Deêm uma olhada na imagem, pra ver se as coisas esclarem um pouco:

 

aula.png

 

Sim, é bastante complicado este conceito..

 

 

Não vou sobrecarregar a aula, para ficar mais fácil o entendimento..

Estudem, leiam quantas vezes for necessário para entender! É um conceito MUIIIIITO utilizado em C++.

 

Até a próxima aula pessoal!

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites
dragonlorde    0
dragonlorde

WOW bem complicadinho mesmo...

Da 1 exemplo de uso de ponteiros?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Dark Skyllen    7
Dark Skyllen
WOW bem complicadinho mesmo...

Da 1 exemplo de uso de ponteiros?

 

Podemos fazer uma função retornar dois dados ou então alterarmos o valor de uma variável através de uma função onde ela não esteja declarada..

 

Veja o exemplo abaixo:

#include <iostream.h>

using namespace std;

void alterarValores(int* v1, int* v2)
{
    int newValor1, newValor2;
    cout << "Digite os novos valores" << endl;
    cin >> newValor1 >> newValor2; // Recebe os novos valores
    *v1 = newValor1; // Alteramos o que está no endereço de memória da 
    *v2 = newValor2; //variavel valor1 de cima (função int main())
}

int main(void)
{
   int valor1, valor2 = 0;
   cout << "Digite dois valores" << endl;
   cin >> valor1 >> valor2; // Recebe dois números quaisquer
   cout << "Variáveis antes de serem alteradas: " << valor1 << " e " << valor2 << endl;
   alterarValores(&valor1, &valor2); // Passa o endereço de memória desses números// e chama a função pra alterar..
   cout << "Variáveis depois de serem alteradas: " << valor1 << " e " << valor2 << endl;
   system("Pause>null");
   return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
dragonlorde    0
dragonlorde

Hm...

Muito legal os ponteiros...

Tem alguma aula que explique o void?Porque eu não vi o void explicado em nenhuma :S

Obrigado pelas aulas e pelo exemplo...

To esperando a parte 2 agora no 09/04 =D

EDIT--

Procurando na net achei isso sobre void...

A palavra-chave "void" em C + + define o conceito de não-existência ou não de atribuição de um tipo em uma variavel ou em uma declaração....

 

Esta isto correto?

Editado por dragonlorde

Compartilhar este post


Link para o post
Compartilhar em outros sites
Dark Skyllen    7
Dark Skyllen
Hm...

Muito legal os ponteiros...

Tem alguma aula que explique o void?Porque eu não vi o void explicado em nenhuma :S

Obrigado pelas aulas e pelo exemplo...

To esperando a parte 2 agora no 09/04 =D

EDIT--

Procurando na net achei isso sobre void...

A palavra-chave "void" em C + + define o conceito de não-existência ou não de atribuição de um tipo em uma variavel ou em uma declaração....

 

Esta isto correto?

 

Sim, tem o mesmo conceito que null, ou seja, não há retorno na função.. o retorno é nulo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Dean    1
Dean

Muito bom as aulas, só entendi a verdadeira utilidade de ponteiros quando precisei deles, antes eu pensava que era muito difícil , mas agora que vi que é fácil.

Compartilhar este post


Link para o post
Compartilhar em outros sites
dragonlorde    0
dragonlorde

Acho que falto um exemplo desse estilo ai:

#include <iostream.h>

int main()
{      
   int minhaVar = 10;
   int* pMinhaVar = &minhaVar;
   cout << *pMinhaVar << endl;//IRA MOSTRAR 10 NA TELA O VALOR QUE ESTA ALOCADO NO ENDEREÇO DE MEMORIA DE MINHAVAR
   *pMinhaVar = 12;//VALOR QUE ESTA ALOCADO NO ENDEREÇO DE MEMORIA DE MINHAVAR MUDADO PARA 12
   cout << minhaVar << endl;//IRA MOSTRAR 12 NA TELA O VALOR QUE ESTA ALOCADO NO ENDEREÇO DE MEMORIA  DE MINHAVAR, DEPOIS DA ALTERACAO
   system("pause>null");
}  

Mudar valores de variaveis via ponteiros ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×