Virtual Threat - 2010
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ponteiros - Exemplificado

2 participantes

Ir para baixo

Ponteiros - Exemplificado Empty Ponteiros - Exemplificado

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

Exemplo Básico para utilização de o tão temido [Tens de ter uma conta e sessão iniciada para poderes visualizar 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:

[Tens de ter uma conta e sessão iniciada para poderes visualizar 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.
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Robson Alves
Robson Alves
Iniciante

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

http://robsonalves.net

Ir para o topo Ir para baixo

Ponteiros - Exemplificado Empty Re: Ponteiros - Exemplificado

Mensagem por -=Yuri=- 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.
-=Yuri=-
-=Yuri=-

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

Ir para o topo Ir para baixo

Ponteiros - Exemplificado Empty Re: Ponteiros - Exemplificado

Mensagem por Robson Alves 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 : Wiki
Robson Alves
Robson Alves
Iniciante

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

http://robsonalves.net

Ir para o topo Ir para baixo

Ponteiros - Exemplificado Empty Re: Ponteiros - Exemplificado

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos