segunda-feira, 22 de julho de 2013

Passando referência de uma função como argumento na chamada de outra função

No código a seguir, a função opera recebe 3 argumentos:
  • 1º argumento: um ponteiro para uma função que recebe 2 argumentos inteiros;
  • 2º argumento: um inteiro;
  • 3º argumento: um inteiro;
A função desejada para ser executada é passada no 1º argumento. Os outros argumentos são repassados para a função que será executada.


#include <stdio.h>

// declaração da assinatura da função a ser passada como argumento para
// outra função 
int (*f) (int, int);

int somar(int a, int b){
       return a+b;
}
int subtrair(int a, int b){
        return a-b;
}
int opera(int (*g) (int, int), int a, int b){
         return g(a, b);
}
int main(){
       printf( "\nsoma: %d\n", opera(somar, 25, 30 ));
       printf( "\nsubtração: %d\n", opera(subtrair, 25, 30 ));
       f = somar;
       printf( "\noutra soma: %d\n", opera(f, 25, 230 ));        
       f = subtrair;
       printf( "\noutra subtração: %d\n", opera(f, 25, 230 )
       return 0;
}



Para testar, foi usado o site ideone.com