Ponteiros

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

Ponteiros

Mensagem por brunolpw em Seg 17 Fev 2014, 10:21 pm

Olá pessoal, venho aqui ensinar de uma forma bem resumida e simples sobre como utilizar ponteiros, em todo lugar, livro, site, fóruns, videos, as explicações sobre ponteiros são extensas e acabam não ensinando o que é de fato e como funciona.

Bom, vamos direto ao assunto então:

-O que são ponteiros?
-Ponteiros são endereços de memória.

-Bom, mas o que isso quer dizer?
-Isto que dizer que eles apontam para um lugar da memória.

-Como assim?
-Fácil, sabemos que a memória é dividida em diversos pedaços, estes pedaços são nomeados de endereços.
-Vamos imaginar que a memória seja um edifício, por tanto ela possui vários endereços. Cada apartamento possui seu próprio endereço. Possuindo cada um uma informação, vamos considerar que cada informação seja uma família.


Edifício = Memória
Apartamento = Endereço
Família = Informação


-Ok, entendemos que um edifício possui vários apartamentos e que estes contém famílias, mas como funciona o ponteiro?
-Bom o ponteiro é a chave, vamos explicar isso melhor, para que uma família possa acessar o conteúdo de outro endereço é necessário que ela utilize uma chave para isso.


-Acho que não estou entendendo, pode me mostrar em código?
-Bom, vamos ao código então, para que seja possível visualizar o processo.

Ponteiro:

Código:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    // Uma variável com um valor definido.
   int valor = 7;
   // Endereço da variavel "valor" é armazenado neste inteiro, sendo passado pela chave "&".
   int endereco = &valor; // É importante resaltar que o valor mostrado aqui pode variar uma vez que o PC é reiniciado.
    // O caracter "*" captura a informação contida na chave "&".
   int *ponteiro = &valor;

   printf("valor: %i\n", valor);
   printf("endereco: %i\n", endereco);
   printf("ponteiro: %i\n", *ponteiro);

   printf("\n\nCalculo efetuado: *variavel = *variavel + *variavel;\n\n");
   /*
    *  A variavel "valor" está recebendo a soma de seu proprio valor através da varivel *ponteiro.
    *
    *  Este procedimento se dá através do endereço de memória da váriavel "valor" cujo está sendo
    * manipulado por "*ponteiro". É possivel notar que após efetuar o calculo, o valor de "valor" e
    * "*ponteiro" são alterados por igual, vendo que trata-se do mesmo valor, porém o valor de "endereco"
    * permanece o mesmo, pois este é o endereço de memória onde está contida esta informação.
    */
   *ponteiro = *ponteiro + *ponteiro;

   // Mostra os valores após alteração.
   printf("valor: %i\n", valor);
   printf("endereco: %i\n", endereco);
   printf("ponteiro: %i\n", *ponteiro);
   return 0;
}

-Agora eu entendi.
Quer dizer que o carácter “*” representa o conteúdo do endereço e o “&” a chave do mesmo. Então quando são linkados à uma variável esta passa a ter propriedades de passar o seu valor ou o seu endereço de memória.

-Exatamente. Quando informamos *variavel estamos querendo pegar o conteúdo de uma &chave de endereço.
Vemos isso na linha em que informa: int *ponteiro = &valor;
Na linha anterior vemos: int endereco = &valor;
Este por sua vez vai armazenar o endereço da memória, ou fazendo referencia ao nosso edifício, ele pegara o numero do apartamento.


Espero que nesta forma de explica o que são ponteiros tenha ficado claro o que são e como utilizar.

Para que não haja dúvidas irei colocar outro exemplo de ponteiros utilizando funções.

Qualquer dúvida é só postar, valeu pessoal.


Ponteiro com função:

Código:

#include <stdio.h>
#include <stdlib.h>

/*
 *  A função "muda_valor" recebe dois ponteiros e em seguida efetua uma operação matematica com os mesmo.
 */
void muda_valor(int *ponteiro_x, int *ponteiro_y){

    *ponteiro_x = *ponteiro_x + 10;
    *ponteiro_y = *ponteiro_y * *ponteiro_x;
}

int main()
{
    int valor_x = 0;
    int valor_y = 0;

    printf("Informe um valor para X:");
    scanf("%i", &valor_x); // Recebe valor do usuário.

    printf("Informe um valor para Y:");
    scanf("%i", &valor_y); // Recebe valor do usuário.

    printf("\n\nAntes de chamar a função.\nX vale:%i \nY vale:%i", valor_x, valor_y);

    /*
     *  Passa os endereços dos valores informados para os ponteiros da função, estes por sua vez
     * irão efetuar as operações definidas e então devolver o valor para que seja exibido.
     */
    muda_valor(&valor_x, &valor_y);

    printf("\n\nDepois de chamar a função.\nX vale:%i \nY vale:%i", valor_x, valor_y);

    return 0;
}

_________________


/**
* @author Bruno La Porta.
* @title  YottaByte.
* */

/* Life rum on code. */


http://codigomestre.forumbrasil.net/

.:: Amigurumi Life ::.
Por Liz Camargo
avatar
brunolpw
YOTTABYTE
YOTTABYTE

Mensagens : 33
Reputação : 14
Data de inscrição : 14/07/2013
Idade : 27
Localização : Brasil - RS - Porto Alegre

http://codigomestre.forumbrasil.net

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