They are alternative syntax for the exact same thing. In both cases a function pointer is passed, but you are allowed to use non-pointer syntax in the parameter list. Use of a function name always decays to a pointer to function (and this can happen recursively).