Tópicos avançados de C: Ponteiros de funções II

No artigo anterior eu mostrei como se declara e como se usa um ponteiro de funções. Ficou faltando eu alertar para um detalhe extremamente importante. Sempre que você for declarar um ponteiro, declare-o apontando para NULL. Deixar de fazer isso pode trazer sérios riscos de segurança ao seu aplicativo.
int *ptr = NULL;

Próximo passo, passar funções como argumentos de funções. Esse artigo será consideravelmente menor que o anterior, até porque o cabeçalho já foi apresentado lá.

A declaração/definição de uma função que aceite o ponteiro de uma função como argumento, é bastante simples. Você já deve ter imaginado inclusive.
void func( float (*ptr) (float, float), float a, float b );

Acabamos de declarar um função que não retorna nada e aceita como argumentos uma função e dois floats. E agora para usá-la, é só chamá-la como a chamamos no exemplo passado.

Um exemplo funcional, mas bastante curto. Brinque um pouco com ele se quiser:

#include <stdio.h>
#include <stdlib.h>
#include "c-funcpointer.h"

/* Aqui esta uma funcao que aceita outra como argumento */
void compute( float (*fnc) (float, float) , float a, float b )
{
	printf( "%g\n", fnc( a, b ) );
}

int main( int argc, char *argv[] )
{
	compute( &times, 7, 5 );
	return 0;
}

Na próxima, veremos funções que retornam ponteiros para funções. E te enganaram dizendo que só dava para fazer isso com LISP né? ;)

Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: