Conversor Binário para Decimal com C usando pilha

Atendendo a pedidos, retornei este post!
Todo mundo se lembra da forma “legal” de converter um número em decimal para binário. Você ia dividindo por dois e acumulando os restos das divisões, até o número chegar ao final da divisão, depois você pegava todos os restos de forma descrescente e ai estava seu número em binário!
Usando pilha, fiz um exemplo.

Simplesmenta vamos dividindo o número que se deseja converter e salvando os restos….

Passagem de variáveis e ponteiros em C: Não se engane!

Tive um problema noob com C… No final do post vão entender o meu “probleminha”.

A passagem de parâmetros em C é complicada inicialmente, mas depois não há problemas, você entende a lógica da coisa! Mas se você esquece um pouco das características de C e depois voltar, pode encontrar-se com errinhos que não te deixam dormir!

Sobre a passagem de parâmetros em C:

A passagem de parâmetros é feita por cópia de conteúdo, ou seja, você não envia uma referência da variável, você realmente tem uma variável local com o conteúdo que foi enviado. Alguns casos são excessões(Assim como em Java algumas variáveis são passadas por conteúdo também, as primitivas) como ponteiros e vetores(São um tipo meio diferente de ponteiro) .

Não vou entrar em detalhe sobre ponteiros, mas eles são variáveis que apontam para outras, ou seja, o conteúdo de um ponteiro é o endereço para outra variável. A declaração de um ponteiro faz-se usando o “*”, onde o ponteiro tem um tipo para o qual ele aponta(char *p: aponta para um char). O acesso ao endereço de uma variável é feito por “&”, e para acessar o conteúdo de onde um ponteiro aponta você usa o “*”. Um exemplo simples.

Resumindo, ponteiros em C são muito importantes importantes.


Bem, o problema que consegui, bem principiante sabendo essa teoria acima, foi relacionado a lista ligada, onde em uma função eu não conseguia alterar a variável local, a que chama
a função. Perdi 1 hora com isso até que resolvi postar no maior fórum do maior site de C++(eu não achei um de C bom até hoje) do mundo(cplusplus.com)! Postei no JavaFree também hehehe. O pessoal deste dois fórum me ajudaram!
Bem, o caso foi que eu achaa que eu era o bonitão passando um ponteiro como parâmetro, sendo que esqueci que ponteiro não é nada mais que uma variável, onde o seu conteúdo também será copiado… Olhe a forma [b]errada[/b].

Isso acima está errado, a minha função recebe um ponteiro, eu achava, de forma ridícula, que o conteúdo do ponteiro iria modificar a variável de origem =<. Bem, é óbvio que não. Nota-se um erro conceitual, na verdade uma confusão com o conceito… Eu recebia uma variável do tipo ponteiro, e não uma referência para uma variável!. Eu conhecia ponteiro para ponteiro, até ponteiro para ponteiro para ponteiro, até… Brincadeira hehe, quando li as respostas nos fóruns e tive meus olhos abertos, foi fácil ajeitar.

Para quem está acompanhando, atenção para este ponto:
(*lista)
Onde eu acesso o conteúdo de meu ponteiro para ponteiro, ou seja, outro ponteiro! Assim eu modifico os atributos dele! Não localmente como eu estava fazendo anteriormente…
Atenção para a chamada agora:

//declarando:
struct _lista *teste;

//chamando o método de remoção:
remover(&teste, eliminado);

Observem que mesmo sendo um ponteiro, eu passo a referência [do|para] meu ponteiro, o endereço!
Para quem quiser conhecer a lista duplamente ligada inteira(espero que não copiem para trabalho de escola…)