#include <stdio.h>

typedef void*(*PtrAllgemein)();

/* statt int bla(int) : */
void* bla(int i){printf("%d",i);return (void*)i;}

/* statt char *foo(char *) : */
void* foo(char *s){puts(s);return 0;}

int main() {
	int i;
	enum {BLA,FOO};
	PtrAllgemein p[] = {bla,foo};
	
	p[BLA](2);
	p[FOO]("hello");
	
	/* für die Return-Typen der Funktionen sollte man dann aber nur Zeiger verwenden,
	evtl. würden noch integer Typen gehen, die dann aber (sowohl in der Funktion als auch beim Aufruf) gecastet werden müssen: */
	
	i = (int)p[BLA](1234);
	printf("%d",i);
	
	return 0;
}
