Você está na página 1de 8

Funes - Ponteiro para funes

O C permite que acessemos variveis e funes atravs de ponteiros! Podemos ento fazer coisas como, por exemplo, passar uma funo como argumento para outra funo. Um ponteiro para uma funo tem a seguinte declarao: tipo_de_retorno (*nome_do_ponteiro)(); ou tipo_de_retorno (*nome_do_ponteiro) (declarao_de_parmetros);
307

Funes
- Ponteiro para funes Deve-se ressaltar os parnteses que devem ser colocados obrigatoriamente. Se declaramos: tipo_de_retorno *nome(declarao_de_parmetros); Estaramos, na realidade, declarando uma funo que retornaria um ponteiro para o tipo especificado. Porm, no obrigatrio se declarar os parmetros da funo. Veremos a seguir um exemplo do uso de ponteiros para funes:
308
234

#include <stdio.h> #include <string.h> void PrintString (char *str, int (*func)(const char *)); main (void) { char String []="Curso de C."; int (*p)(const char *); p=puts; PrintString (String, p); return 0; } void PrintString (char *str, int (*func)(const char *)) { (*func)(str); func(str); }
309

Funes Exerccio Construa um programa que receba da linha de comando, com a qual o programa executado, dois inteiros e a descrio da operao que ser efetuada sobre eles (soma, subtracao, multiplicacao, divisao e resto). O programa deve possuir uma funo para efetuar cada uma das operaes mencionadas, devendo se utilizar do conceito de ponteiro para funo na seleo da funo adequada a ser executada.

310

Funes - Recursividade Na linguagem C, assim como em muitas outras linguagens de programao, uma funo pode chamar a si mesma. Uma funo assim chamada funo recursiva. Muitos problemas so definidos com base nos mesmos, ou seja, podem ser descritos por instncias do prprio problema. Para estas classes de problemas, o conceito de recursividade torna-se muito til.
315

Funes
- Recursividade (continuao) Todo cuidado pouco ao se fazer funes recursivas. A primeira coisa a se providenciar um critrio de parada, o qual vai determinar quando a funo dever parar de chamar a si mesma. Este cuidado impede que a funo se chame infinitas vezes. Um exemplo de um problema passvel de definio recursiva a operao de multiplicao efetuada sobre nmeros naturais. Podemos definir a multiplicao em termos da operao mais simples de adio.
316

Funes
- Recursividade (continuao) No caso A*B pode ser definido como A + A * (B - 1) precisamos agora especificar um critrio de parada, qual seria?
317

A*0=0

Funes
- Recursividade (continuao) De acordo com o que vimos at o momento, podemos implementar um lao de repetio que implementaria o clculo da operao de multiplicao com base na operao de adio. Definiremos agora este lao: ... int A, B, RES; ... for(RES=0;B;B--) RES+=A; ...
318

Você também pode gostar