Introdução à ponteiros em C

Com esse artigo pretendo desvendar alguns dos segredos de ponteiros na linguagem C, estes tão temidos pelos iniciantes da linguagem. Sem mais, Hey! Ho! Let´s GO!

[ Hits: 28.602 ]

Por: Perfil removido em 29/03/2005


Declarando e usando variáveis do tipo ponteiro



Como a maioria de nós já sabe, para se definir um ponteiro devemos colocar um asterisco (*) entre o tipo e o nome da variável.

Exemplo:

int *a;

É importante lembrar que quando definimos um ponteiro, estamos alocando o espaço para o endereço de memória apontado e não para o valor.

Para usar um ponteiro, devemos sempre inicializá-lo, NUNCA NA DECLARAÇÃO, ou seja, colocar um endereço válido para depois fazer acesso ao valor alocado no endereço de memória apontado.

O exemplo a seguir demonstra bem o que quero dizer:

#include <stdio.h>

int main()
{
    int *a; /*Declaração de um ponteiro de inteiros*/
    int b = 10; /*Declaração e inicialização de uma variável com um inteiro 10*/

    a = &b; /*o ponteiro a recebe o endereço de memória da variável b */
    
    /* É importante lembrar que o '&' refere-se ao endereço de memória onde a variável foi criada. Portanto, após a execução dessa linha o ponteiro a está apontando para o endereço de memória da variável b, que contém o valor inteiro 10.  */
    printf("\nO ponteiro a aponta para um endereço ");
    printf("de memória que contém o valor %d .\n",*a);

    return 0;
}

Bom, até o momento aprendemos como declarar variáveis do tipo ponteiro, aproveitando um pouco do exemplo acima vamos entender como usar efetivamente ponteiros. Como você pode perceber no exemplo acima, estamos trabalhando com o endereço apontado pelo ponteiro. Talvez você esteja se perguntado: como assim? A tabela a seguir vai te ajudar a entender melhor o que quero explicar.

Considere as seguintes variáveis:

int *a; /*Ponteiro*/
int b;

Podemos manipular essas variáveis utilizando alguns "indicadores".

PONTEIRO

-

VARIÁVEL

O que faz?

*a

-

-

Conteúdo do endereço apontado pelo ponteiro.

a

-

b

Conteúdo da variável ou ponteiro, no caso do ponteiro o endereço apontado.

&a

-

&b

Endereço de memória onde foi criado a variável ou ponteiro.



Conclusão


Espero ter sido claro em minhas explicações, caso tenham tido alguma dúvida ou se não fui claro em algum aspecto, por favor entrem em contato.

Abraços à todos!

Página anterior    

Páginas do artigo
   1. Conceito básico
   2. Declarando e usando variáveis do tipo ponteiro
Outros artigos deste autor

Dynamic libraries com libtool

Usando o gerenciador de arquivos XFE para administrar as tarefas no Linux

Bootsplash no Slackware - HowTo

Navegando com privacidade com Tor e Firefox

Aixgl + Beryl no Slackware

Leitura recomendada

Introdução à linguagem C - Parte III

Funcionamento da memória

Criando uma aplicação gráfica com o Qt Designer

Utilizando a função QSort em C

Mais sobre recursividade em C/C++

  
Comentários
[1] Comentário enviado por birilo em 30/03/2005 - 08:29h

=(

[2] Comentário enviado por franklinbr em 30/03/2005 - 10:21h

Arthur !!!

Ae cara, acho que sua explicacoes sobre ponteiros ficou um tanto vago, e não vejo nada de diferente que geralmente as apostilas tradicionais encontradas pela net trazem. Você apenas descreveu o que eh um ponteiro (de uma forma superficial do ponto de vista didatico). Podia dizer sobre onde realmente aplicamos um ponteiro e em que condições ele possa facilitar ou simplificar nosso codigo, e fazendo referencias a parametros externos (mais conhecidos como argc e argv). E isso ae.... desculpe se parece chato .....


abracos

franklin anderson

[3] Comentário enviado por ygorth em 30/03/2005 - 10:37h

falto muita coisa neste artigo amigao!

[4] Comentário enviado por removido em 30/03/2005 - 13:33h

concordo com você amigos, tenho conciencia que existem artigos melhorem e que faltaram assuntos a serem abordados. mas o objetivo do artigo não era se aprofundar no estudo de ponteiros, e sim tirar dúvidas BÁSICAS, de forma simples e superficial, sobre ponteiros.Desculpe se não atendi as suas espectativas, no próximo artigo especificarei melhor o tema que irei abordar. Se vocês quiserem se aprofundar no estudo de ponteiros recomendo a leitura de um livro muito bom chamado "The C Programming Language" de Ritchie & Kernighan, o capitulo 5 deste livro aborda muito bem este assunto.

Abraços a todos.

[5] Comentário enviado por jllucca em 30/03/2005 - 21:50h

Arthur,

Seu artigo está muito básico. Fora isso achei que faltou um pouco de esforço por sua parte, mas já da pra sentir que tem potencial. Infelizmente, achei duas afirmações que ficam no minimo ambiguas no entendimento...


"Existem dois grandes problemas quando falamos de ponteiros: distinguir quando estamos trabalhando com seu valor, ou seja, o endereço apontado e quando estamos trabalhando com a informação apontada por ele."

Nesse paragrafo acima, temos um probleminha de ambiguidade comum, pois o valor do ponteiro é o endereço da variavel. Mas, uma mente aprendendo pode ligar valor com o valor de onde o ponteiro aponta(variavel apontada?). Mesmo nesse caso querendo dizer o endereço contido no ponteiro.


"Para usar um ponteiro, devemos sempre inicializá-lo, NUNCA NA DECLARAÇÃO, ou seja, colocar um endereço válido para depois fazer acesso ao valor alocado no endereço de memória apontado."

Aqui, o problema está justamente onde voce chamou atenção... Porque não podemos iniciar um ponteiro na declaração? Iniciar um ponteiro é alocar a memoria pra onde ele vai apontar então porque não unir o útil(declarar o ponteiro) ao agradavel(alocar a memoria usada pelo ponteiro)?

Ainda não entrando em "malloc's" da vida porque não fazer:

{
int b = 10;
int *a = &b; // porque nunca iniciar o ponteiro na declaração?

(...)
}


Bom, o que espero com essas perguntas é tentar chamar atenção para reflexão. Não sou o dono da verdade e sempre gosto de debater sobre o que me parecem "errinhos", numa tentativa de estimular o pessoal.

[]'s

[6] Comentário enviado por removido em 30/03/2005 - 23:41h

Primeiramente gostaria de pedir desculpas se fui um pouco agressivo em minha resposta.
Gostei muito de sua crítica Ricardo, com certeza tomarei mais cuidado ao escrever um novo artigo, e tentarei ter mais vontate em tornar o material escrito mais didático. ;)
Quando mencionei em "Para usar um ponteiro, devemos sempre inicializá-lo, NUNCA NA DECLARAÇÃO," tentei transmitir o que considero como uma boa prática de programação, entendo que não fui claro na explicação. Tenho a visão de que falhei em alguns pontos, e agradeço as críticas construtivas, pois a partir delas terei nova motivação em escrever artigos com melhor qualidade.

Abraços.

[7] Comentário enviado por fredwind em 30/09/2005 - 14:55h

E aew brother!!! ta massa tua explikção kra, pra quem ta aprendendo so vai mermu c for de vagarinho!!!! se tivesse aprofundado um pouquinho mais tria fikdo melhor!! mais ta joia assim!!!

[8] Comentário enviado por _Dr4k0_ em 28/01/2007 - 11:18h

muito pequeno para falar de um tema tão vasto

[9] Comentário enviado por unkn0wn em 27/03/2007 - 20:30h

Aceitar este tipo de Artigo eh foda.. Não explica nada d+.

[]`Z

[10] Comentário enviado por TRBaldim em 21/03/2010 - 16:40h

Me desculpe mas realmente este artigo sobre ponteiros está muito, muito vago meeeeesmo... Lendo a primeira página simplesmente me imaginei na época quando estava começando a programar em C e não entendia o que era ponteiro. Se eu pegasse esse artigo para tentar entender... Eu iria me confundir ainda mais...

[11] Comentário enviado por zekrioca em 02/04/2010 - 16:48h

Aproveitando as críticas, vou recomendar um link no qual a explicação está melhorada: http://www.mtm.ufsc.br/~azeredo/cursoC/c.html

[12] Comentário enviado por Nitro em 04/04/2010 - 00:37h

Só lembrando que fazendo parte de uma comunidade livre e que nesse caso não recebemos NADA pelos artigos temos que ter cuidado ao criticar um artigo. Afinal o "removido" não recebeu nenhuma graninha pelos artigos. Portando elogios ao inves de criticas serviriam muito como incentivo e motivação para que o "removido" continue a publicar artigos que possam ajudar. Embora esse tenha sido curto e pouco explorado como alguns aqui disseram, deu para ter uma noção do que é um ponteiro.
De forma que eu gostaria de agradecer o "removido" pelo artigo e que os comentários acima não te desestimule a contribuir com outros artigos.

Lembre-se:

Amadores contruiram a Arca de Noé e Profissionais o Titanic

Vlw mano

Abs a todos!!!!

[13] Comentário enviado por mfs em 12/04/2010 - 00:50h

O grande problema é que ponteiro sempre foi e ainda é uma das maiores dificuldades para quem ta aprendendo C. E os exemplos mais básicos de ponteiros que são os que normalmente encontramos são facilmente resolvidos de outras formas, sem ponteiros. Mas como nada se aprende começando do difícil, o artigo é muito bom para quem ta tendo seu primeiro contato com ponteiros. Como o próprio título sugere é uma introdução a ponteiros.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts