Página 1 de 1

FIFO ( push, pop, peek, reset, init )

MensagemEnviado: 28 Fev 2007 17:18
por andre_luis
Pessoal,

Estou trabalhando com um kit de funcoes de manipulacao de dados com acesso do tipo FIFO.
Só que a única função acima que eu não entendi a finalidade é Peek.
Alguem poderia explicar conceitualmente a finalidade desta função ?

Muito obrigado.

Re: FIFO ( push, pop, peek, reset, init )

MensagemEnviado: 01 Mar 2007 13:45
por andre_luis
Aproveitando a oportunidade, tenho outra dúvida conceitual em 'C' :

Alguem sabe explicar o significado dos 2 asteriscos ( ** ) no protótipo da função abaixo ?

extern BOOL peekFifo##fcn_name( FIFO_##type * pfifo, DWORD dwPos, type** ppValue ) ;

MensagemEnviado: 01 Mar 2007 22:12
por Maurício
Fala, André.

Dois asteriscos significa ponteiro de um ponteiro, ou seja, essa variável guarda o endereço de um outro ponteiro.

Em C, vc pode ter ponteiros de ponteiros de ponteiros de ponteiros de ponteiros, e por aí vai. :lol:
Basta aumentar a quantidade de asteriscos.

Na prática, não sei pra que serve porque eu ainda não precisei usar isso.
Codificado, ficaria dessa maneira:

Código: Selecionar todos
int a, *b, **c;
a = 10;
b = &a;
c = &b;
**c = 20;  // aqui, o valor da variável "a" será de 20, usando INDIREÇÃO


(???)

[]'s

RETI.

MensagemEnviado: 01 Mar 2007 23:22
por Renie
Olá André!

Sendo repetitivo, não uso C ( nem em PC nem em uC, nunca usei, só
tento ajudar pelo que já ví em algum lugar ou por palpite/dedução! )

Já que o Mauríco respondeu a questão do "* *", que eu não saberia
mesmo, e ninguém respondeu ao PEEK, vai minha idéia:

PEEK é posicionar, em Basic do TK85, Sinclair, TRS80, Commodore, e outros que usavam PEEK na mesma época, PEEK era para ler um
determinado endereço de memória, em PASCAL, o PEEK é para
posicionar também, mas, não só para ler como para gravar, apenas
posicionava em um ponto de um arquivo, o comando seguinte poderia
ler ou gravar (neste caso era para arquivos).

Como não conheço a sintaxe do comando e seus parâmetros, o exposto
acima deve ajudar!

MensagemEnviado: 02 Mar 2007 09:51
por andre_luis
Obrigado maurício,

Realmente, o 'C' tem recursos fascinantes, e esse é mais um que acabei de aprender

Obrigado Renie,

Realmente, o que eu suspetava era que esse Peek fosse uma leitura, sem alteração no estado da pilha.

MensagemEnviado: 02 Mar 2007 19:19
por ivan
Imagina a seguinte situação:

int *fa = &funcaoA(parmsFunc){....};
int *fb = &funcaoB(parmsFunc){....};
int *fc = &funcaoC(parmsFunc){....};

int **ptrMatrix[3];
ptrMatrix[0] = &fa;
ptrMatrix[1] = &fb;
ptrMatrix[2] = &fc;

Caso vc receba uma variavel com valores entre 0 e 2 e queira fazer chamadas de função sem fazer if's ou switch's, por exemplo, mantendo o seu pgm modular.

OBS: A sintaxe não é essa mas tô sem saco de escrever certo. O importante é o conceito.

MensagemEnviado: 05 Mar 2007 09:37
por andre_luis
ivan escreveu: Caso vc receba uma variavel com valores entre 0 e 2 e queira fazer chamadas de função sem fazer if's ou switch's, por exemplo, mantendo o seu pgm modular.


Sensacional !!

Mas isso é padrão ANSI ? Pois eu creio que nem todos os compiladores possuem a capacidade de usar ponteiro para funcoes. Segundo li no Help do CCS, acho que ele não faz isso para uC PIC's, ou estou enganado ?

Brigado....

+++

MensagemEnviado: 05 Mar 2007 19:46
por ivan
padrão ANSI!