2016-12-08 3 views
2

Когда мы используем имя функции для передачи аргументов, используем ли мы указатель на эту функцию?Название функции. это указатель на эту функцию?

Пример:

int foo(int a, int b); 

int main(void) 
{ 
    int a = foo(1,3); //foo() it's a pointer to the function foo()? 
    return 0; 
} 
+0

НЕТ, это только вызов функции. –

+3

Названия функций распадаются на указатели при передаче в качестве аргументов. Это все, о чем вам стоит позаботиться. – StoryTeller

+0

Он компилируется в прыжок на адрес кода этой функции, поэтому это указатель, но это не обычное понимание указателей. Плюс в этом отношении любая переменная может быть понята как указатель на пространство в памяти – MotKohn

ответ

5

Термин вы ищете является функция целеуказатель. Это не указатель тип, но большую часть времени это преобразован в один.

Цитируя C11 стандарт, глава §6.3.2.1, (курсив мой)

Функция Обозначение это выражение, которое имеет тип функции. За исключением случаев, когда это операнд оператора sizeof, то _Alignof оператор, 65) или унарным & оператор, функция целеуказатель с типом «» функции возвращающегося типа «» преобразуется в выражение, которое имеет тип ' 'указатель на функцию возвращаемого типа' '.

Связанные, от «функции вызова» часть спецификации, глава 6.5.2.2

Выражение, которое обозначает функцию под названием 92) должны иметь указатель типа функционировать возвращения недействительным или возвращения полный тип объекта, отличный от типа массива.

, который сообщает нам, что при вызове функции указатель фактически преобразуется в указатель.

Смежные вопросы