#include #include typedef int (*CompareFunc)(void*, void*); int CompareVals(void* a, void* b, CompareFunc compare) { printf("CompareVals\n"); return (*compare)(a, b); } typedef struct Foo { int x; int y; } Foo; int CompareFooFunc(void* a, void* b) { Foo* aa; Foo* bb; aa = (Foo*) a; bb = (Foo*) b; printf("CompareFoo func pointer\n"); return 0; } int main(int argc, char *argv[]) { Foo a = {1, 2}; Foo b = {1, 2}; Foo c = {1, 3}; int (*StackVariableCompare)(void*, void*); StackVariableCompare = CompareFooFunc; CompareFunc func = CompareFooFunc; printf("Return: %d\n", CompareVals(&a, &b, func)); printf("Return: %d\n", CompareVals(&b, &c, CompareFooFunc)); printf("Return: %d\n", CompareVals(&a, &b, StackVariableCompare)); }