Jump to content
Sign in to follow this  
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.

Share this post


Link to post
Share on other sites
dragonlorde    0
dragonlorde

WOW bem complicadinho mesmo...

Da 1 exemplo de uso de ponteiros?

Share this post


Link to post
Share on other 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;
}

Share this post


Link to post
Share on other 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?

Edited by dragonlorde

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 ;)

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×