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.603 ]

Por: Perfil removido em 29/03/2005


Conceito básico



Bom, antes de mais nada: afinal de contas, O QUE É UM PONTEIRO?

Um ponteiro é um tipo de dados específico com tratamento diferenciado pelo compilador. Devemos entender que o ponteiro é um tipo de dado como inteiro, float, double e caractere. A grande diferença entre uma variável e um ponteiro, é que ele sempre conterá um endereço de memória. É através desse endereço de memória que teremos acesso a informação desejada.

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. Para os iniciantes o maior problema é entender e aceitar que, em linguagem C, estamos trabalhando diretamente com a memória.

Por tratar-se de um endereço, devemos especificar que tipo de variável será encontrado no endereço de memória apontada pelo ponteiro. Sendo assim, podemos criar um ponteiro para inteiro, caractere, estrutura ou até mesmo para um arquivo.

Observações adicionais: caro colega, talvez você não saiba, mas quando você usava arrays (vetores e matrizes), você estava trabalhando diretamente com ponteiros. Mas esse assunto será tratado num artigo posterior.

    Próxima página

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

Configuração universal do servidor X (modo gráfico)

Gerência e criação de módulos do kernel

Acessando partições NTFS no Linux

Formatando o bash com cores e efeitos

FreeRADIUS - Conceitos Básicos - Parte II

Leitura recomendada

Introdução à linguagem C - Parte II

Utilizando a função QSort em C

Mais sobre recursividade em C/C++

Linguagem C - O primeiro programa

Vírus de computador e criação de um vírus em C/C++ (parte 1 - básico)

  
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