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