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.
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.
[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;
[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",
[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.
[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: tiago@roxcorp.com