См. Раздел C99 6.3.2.1, §4:
A обозначение функции - это выражение с типом функции.За исключением случаев, когда это операнд оператора sizeof
или унарный оператор &
, указатель функции с функцией типа '', возвращающей тип '', преобразуется в выражение с указателем типа '' нафункция, возвращающая тип ''.
Таким образом, если foo
является функцией, выражения foo
и &foo
в основном взаимозаменяемы, в частности
foo == &foo
Это похоже на то, как выражения с типом массива неявно преобразуются в выражения с типом указателя.Кроме того, если fp
является указателем на функцию, вы можете вызвать его с разыменованием или без него, то есть выражения
(*fp)(42)
и
fp(42)
эквивалентны.Вызовы функций фактически определяются в терминах указателей функций (раздел 6.5.2.2 §1), а не в качестве указателей функций, т. Е. В том, что касается языковой семантики, *fp
в первом примере неявно преобразуется обратно в fp
до того, как парены будутприложенное.