C99 6.3.2.1/4
A function designator is an expression that has function type. Except when it is the operand of the sizeof operator or the unary & operator, a function designator with type "function returning type" is converted to an expression that has type "pointer to function returning type".
As I understand, this suggests that except when sizeof
operator and unary &
operator is applied to function; no function to pointer conversion will happen. But from what I've seen,
int (*p)(int) = &foo;
or,
int (*p)(int) = foo;
Both seems to work. This shows that both &foo
and foo
are equivalent. So, where does unary &
operator comes in affect if it has effect as seen above?