Ponteiros void na linguagem C (parte 2)

Nessa seqüência continuarei falando sobre como podemos utilizar esses ponteiros tão discriminados e a melhor forma de usar a atribuição neles. Além disso mostrarei como podemos usar ponteiros void para construirmos uma fila genérica que pode literalmente guardar qualquer tipo de dado.

[ Hits: 57.745 ]

Por: Ricardo Rodrigues Lucca em 09/06/2004 | Blog: http://aventurasdeumdevop.blogspot.com.br/


Teoria do void



Na verdade não é uma teoria e sim, uma explanação. Assim, vou começar a falar dessa idéia. Antes de continuar, vamos recordar o que já sabemos sobre o void:
  • Não contém tipo;
  • Não é possível manipulações(acesso e leitura) dos dados diretamente;
  • Tem tamanho normalmente correspondente a um byte.

Bom, mas então para que existe o tipo void? Na realidade, o tipo void foi feito para ser um tipo "genérico" e por ser "genérico" quem notar vai perceber que com ele é possível fazermos algo do tipo:

// Este código é ilustrativo e não funcionará!
#include <stdio.h>
void main(void)
{
      void y[ sizeof( int ) ];
      y = 9;
      printf("%d", y);
}

Infelizmente, esse tipo de algoritmo não é possível de se fazer por um único motivo. Esse motivo é que o compilador não permite que declaremos tipos "void" como variáveis (ponteiros é a excessão). Mas, voltando a teoria... Assim, poderíamos alocar qualquer variável apenas informando quantos bytes queremos e deixando a alocação para o programa permitindo-nos ficarmos mais fixados no nosso trabalho.

No código ilustrativo mostrado acima, mesmo contendo alguns errinhos serve para demonstrar o que estava querendo que vocês já soubessem. O tipo void é o tipo primitivo da linguagem C, pois apartir dele podemos formar qualquer outro tipo que existe ou desejamos. Assim, podemos dizer que essa é a variável mais poderosa de todos os tipos. Mas, também a que mais desse o "nível" de todas, talvez, sendo por isso a mais negligenciada.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Atribuição
   3. Teoria do void
   4. Fila
   5. Concluindo
Outros artigos deste autor

Ponteiros void na linguagem C

Introdução as Bibliotecas do C/C++

Linux no Rio Grande do Sul

Criando um servidor de Ultima Online

Uma pequena análise do Gentoo Linux

Leitura recomendada

Tutorial OpenGL

Introdução à plataforma GNU de desenvolvimento

Tutorial OpenGL v2.0

Como aprender a programar e produzir aplicativos usando Euphoria

Utilizando a biblioteca NCURSES - Parte III

  
Comentários
[1] Comentário enviado por lorenzi em 10/06/2004 - 00:26h

muito bom o artigo para quem ja programa ou que esta comecando a usar a linguagem C.

[2] Comentário enviado por ymc em 11/06/2004 - 08:22h

Este artigo com certeza completa o primeiro. Antes estava meio vago a utilidade do ponteiro void. Com este artigo ficou mais claro pra mim e tirou algumas duvidas sobre malloc.
Otimo artigo.

[3] Comentário enviado por robson.dantas em 13/06/2004 - 09:53h

Muito bom o seu artigo.
Tenho preparado algo sobre ponteiros void, para C++; Criei uma classe genérica, que faz acesso à dados em C++ para bancos como postgres, mySQL, SQL Server e Oracle;

o que acha sobre o assunto ?

--
Robson

[4] Comentário enviado por jllucca em 14/06/2004 - 19:43h

ymc,

certamente que completa o primeiro! Como disse no inicio do segundo, eu dividi o assunto pra deixar a parte "pratica" para ser tratada nesse artigo. Mas, para quem ler o conteúdo desse segundo artigo esta no primeiro só que mais direto e sem precisar "fritas os miolos",

[]'s

[5] Comentário enviado por jllucca em 14/06/2004 - 19:45h

Robson,

sobre o que eu acho é o seguinte void é excelente para C. Mas, em C++ temos algumas coisas que nos auxiliam que podem ser até melhores que o void. No seu caso, voce já pensou em usar template? Eu não conhecia isso em C++, mas seria uma alternativa mais elegante até para a classe que coloquei na sessão scripts.

[]'s

[6] Comentário enviado por engos em 25/06/2004 - 10:47h

Achei bem vago esse segundo artigo, me deixou a impressão que você correu para completar o primeiro e atropelou um pouco a teoria e deixo que o conceito prático explicasse tudo por si só.

Como você mesmo disse, é o primeiro artigo de forma prática, existiu um complementar, mas nada de muito interessante.

Gostei do primeiro artigo, mas esse segundo foi mediano, entretanto deu para perceber que você conhece bem sobre o assunto, que tal um terceiro artigo mais elaborado, com conceitos técnicos e práticos proporcionais e exemplos para serem usados no cotidiano?

Lendo esse segundo fiquei com a seguinte dúvida:
Em quesito de desempenho, onde está a vantagem?

[7] Comentário enviado por roxcorp em 02/11/2004 - 18:24h

Ola jllucca,

Fila nao eh FIFO? Quando removo um da fila ele tem que me entregar o primeiro que entrou e nao o ultimo. Isso que vc implementou acima eh uma pilha. FILO.

Abraco. Quaquer coisa me fala se eu estiver errado: [email protected]

Tiago

[8] Comentário enviado por jllucca em 07/11/2004 - 20:22h

Olá,

Estou me comunicando com o roxcorp por email,

mas o programa da pagina quatro está correto. Acabei de testa-lo aqui e ele realiza um FIFO e não um FILO como ele alega.

A lista: 0 1 2 3 4

Ao ser removido dois elementos ficou: 2 3 4

Em FILO, seria: 0 1 2
Mas, não aconteceu. :-)

Como disse, estou falando por email com ele para vermos esse impasse.

[]'s

[9] Comentário enviado por kernel_sys em 10/10/2005 - 13:40h

Muito bom artigo mesmo , parabens


Contribuir com comentário