Ponteiros - Exemplificado

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Ponteiros - Exemplificado

Mensagem por Robson Alves em Qua Out 14 2009, 22:34

Exemplo Básico para utilização de o tão temido [Você precisa estar registrado e conectado para ver esta imagem.] ponteiro.

Abaixo todo o código.
Código:

#include

int main()  {
    int y, *p, x;
    y = 0;
    p = &y;
    x = *p;
    x = 4;
    (*p)++;
    x--;
    (*p) += x;
    printf ("y = %d\\nx = %d\\n", y,x);
    return 0;
}

Passo a Passo:

Para declarar uma variavel ponteiro a sintaxe é

Código:
tipodedados nomedavarivel * (Asterisco)
          ex: int soma*;

Na teoria o ponteiro é reponsável por apontar (do sentido de Referênciar) outra variavel, essa indição
internamente é feita por um endereço (endereço de memória), ou seja, o ponteiro possui o endereço de uma outra variável no
programa, exemplificando:


Código:
 
 int y, *p, x;
    y = 0;
    p = &y;

p, que é um ponteiro e ele possui o endereço em memória que APONTA (daí o nome Ponteiro) a variável Y.
Legal né, então entendemos que se eu mudar o Y mudo o P e se eu Mudar o P muda o Y?

A resposta é sim! Alterando a variavel Ponteiro você alterará o valor da sua referência!

Para passar este endereço para o ponteiro utiliza o E comercial ( & ) antes da variável que desejar.


Código:

  x = *p;
    x = 4;
    (*p)++;
    x--;
    (*p) += x;
    printf ("y = %d\\nx = %d\\n", y,x);

Agora igualamos o ponteiro a variável X, isto significa que estamos passando o valor do ponteiro ou seja (y),
para X. Observe que ao alterar o valor do X para 4 nenhuma alteração é feita ao ponteiro ou ao "apontado".
Isso porque nós apenas passamos o valor de Y para X!


(*p)++, este causando um auto-incremento, más por que (*p)++?
p++; incrementa o endereço
(*p)++; incrementa a variável apontada
*(p++) idem ao primeiro;

Neste caso, como no printf, estamos indicando a variável (y), utilizamos (*p)++.
então teremos, Y = 1;

x--, efetua um decremento, após o programa ler esta variavel.

Para alguns casos esta atribuição é irrelevante, porém o incremento/decremento no sufixo da variavel,
ex: int v = --a; é diferente de int v = a--;
pois o programa atribuirá valores diferentes, onde no primeiro caso o decremento viria antes de passar o valor e no outro depois.

Voltando ao exemplo, então teremos x = 3;

em seguida é feito uma soma do (*p) mais x que é 3. Ficando Y = 4;

Veja o resultado do nosso programa:

[Você precisa estar registrado e conectado para ver esta imagem.]

Simples e altamente utilizado em programas mais avançados. Para quem tinha dificuldade, aqui está uma boa base!

Dúvidas, Críticas, estou aceitando para melhorar meus tópicos!

Abraços aos leitores.
[Você precisa estar registrado e conectado para ver esta imagem.]

_________________
As palavras movem, mas são os exemplos que inspiram atitude e comportamento semelhante.

Administrador do Fórum
Analisa/Programador at Senior Solution
[Você precisa estar registrado e conectado para ver este link.]
avatar
Robson Alves
Iniciante

Mensagens : 133
Data de inscrição : 10/10/2009
Idade : 28
Localização : São Paulo

http://robsonalves.net

Voltar ao Topo Ir em baixo

Re: Ponteiros - Exemplificado

Mensagem por -=Yuri=- em Sex Out 16 2009, 22:04

Desculpe a pergunta newbie...

mas qual seria a vantagem de usar um ponteiro, sendo que ao mudar o valor da variável, mudo do ponteiro e

assim vice e versa?? Qual o objetivo? Um exemplo de uso seria legal.

_________________
.

-=Código é Poesia=-
avatar
-=Yuri=-

Mensagens : 38
Data de inscrição : 09/10/2009
Idade : 28

Voltar ao Topo Ir em baixo

Re: Ponteiros - Exemplificado

Mensagem por Robson Alves em Sex Out 16 2009, 23:11

Entendi,
Sua pergunta é coerente!

A utilização de ponteiro neste tópico foi extremamente simplificada a ponto de ser rídicula.
Más a utilização do ponteiro é basicamente para isso, anotar o endereço em memória da variável.

Em estrutura de dados, como Fila, Pilha, Lista Encadeada, Lista Duplamente Encadeada... e outras,
utilizam o ponteiro para acessar o exato local onde está a informação da Estrutura de Dados.
Esta utilizada para remoção dos dados ou para inserção de informações no meio da estrutura.

Abaixo mostro os métodos que cuidaram desse tipo de "Rotina" (Inserir ou Excluir), note que o parâmetro de entrada é um
ponteiro!!.

Código:

[font=monospace]/** Protótipo Na Linguagem C
 *  Para uma Fila de elementos inteiros
 */
void inserir(int * Fila, int elemento);
int remover(int * Fila);[/font]

Em Java:
Código:
[font=monospace]
/** Implementação do método na Linguagem Java
 *  Para uma Fila usando referência ( com nodos ( nós ) )
 */
public void insereNaFila(Nodo p) {
    if(this.isEmpty()){
   this.inicio = p;
   this.fim = p;
    }
    else{
   fim.setProximo(p);
   this.fim = p;
    }
}
public void removeDaFila(){
    if(this.inicio != null){
   this.inicio = inicio.getProximo();
    }
}
public boolean isEmpty() {
    return this.getInicio() == null;
}[/font]

Bom novamente estou simplificando, até porque o assunto a partir daqui é falar de Byte a Byte da memória, controle de arrays, remoção de informações de filas ou pilhas... Más espero ter conseguido mostrar um pouco da capacidade e da utilidade do ponteiro!

Qualquer dúvida posta ae!

Site Referência dos Códigos acima : [Você precisa estar registrado e conectado para ver este link.]

_________________
As palavras movem, mas são os exemplos que inspiram atitude e comportamento semelhante.

Administrador do Fórum
Analisa/Programador at Senior Solution
[Você precisa estar registrado e conectado para ver este link.]
avatar
Robson Alves
Iniciante

Mensagens : 133
Data de inscrição : 10/10/2009
Idade : 28
Localização : São Paulo

http://robsonalves.net

Voltar ao Topo Ir em baixo

Re: Ponteiros - Exemplificado

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum