On Tue, 14 Feb 2006, Olwe Bottorff wrote: > I'm looking at a tutorial on function pointers and I > see this code: > > typedef int (*pt2Function)(float, char, char); > ... > pt2Function funcArr1[10] = {NULL}; > > So the typedef creates a variable called pt2Function > that will house a pointer to a function. No. It's giving a type a name. In this case, the name is pt2Function, and the type is a pointer to a function that takes three arguments (a float and two chars), and returns an int. This stuff works on precendences- just like multiplication and division happens before addition and subtraction, so that 3 + 4 * 5 is parsed as 3 + (4 * 5) and not (3 + 4) * 5. In this case, the (float, char, char) binds before the * does, so: int * pt2Function(float, char, char); binds like: (int *) (pt2Function(float, char, char)); -i.e. a function returning a pointer to an int, not a pointer to a function returning an int. So the parens above are necessary to "rebind" the * correctly. > That function > takes parameters float, char, and char. Okay, but the > int refers to the type of pt2Function, right? It's not > saying that the function will eventually return an > int, right? It is saying that the function being pointed to will return an int. > > Also when the funcArr1 array is created it is created > as type pt2Function of size 10. But what's going on > with the {NULL} assignment? I'm pretty sure this is > some sort of initialization, but a quick glance says > it's initializing the 10th member of the array to NULL > but not the first 9. I know that's not right, but what > am I missing here? This is bad form in C code. It'll work, but it's a bad idea. What he's doing is initializing the *first* element in the array to NULL, and all other elements to 0. There is no gaurentee that NULL is 0- just that *casting* 0 to a pointer type results in NULL. This is generally true however. So the code works, generally. Brian