int * (CallFunc)(int a,int b);
is not a function pointer, it is just a function that returns a pointer to an int.
however, int (*CallFunc)(int a, int b) is a function pointer meaning any function that returns an int and takes 2 integers as an argument can be pointed by CallFunc.
for eg, if you have int fn(int, int), then CallFunc = fn is valid statement and calling (CallFunc)(int) will actually result in execution of fn. Further down if you assign CallFunc = fn2 where fn2 is of type int fn2(int, int), and then you call (CallFunc)(int), you actually call fn2.
going further ahead you can have an array of this pointer and make its individual element point to varying functions.
check
http://www.geocities.com/hemantborole/
click on KnowledgeBank, C (under my programs), and in the list see the fnptr.c and func_ptr.c programs.
they are not pointers in structure, but they are function pointers and you can happily put them as a member of a structure.