What's so weird? Since the * associate from right to left, you get
*(*(*(*(*(*(printf))))))
The 'printf' expression yields a pointer to function, right? Dereference
it, and you will get... a an lvalue of the function type, right? So,
the first expression
*(printf)
Gives you an lvalue of function type int(char const*,...). There is no
doubt about that, is there? Now, the compiler sees the next dereference
operator. What will it try to do? The dereference operator needs a
pointer as its argument, right? Now, can an lvalue of function type be
converted to some pointer?
According to 4.3, if an lvalue of function type T can be converted to an
rvalue of type pointer-to-T, the result is a pointer to function. So,
the expression
(*printf)
is converted to a pointer to function. The next dereference yields
another lvalue, and so on.
V