2015-10-06 6 views
2

У меня есть этот код С (вдохновленный тест)Что означает `int (*) (int)` in c mean в отношении типа?

#include <stdio.h> 

int foo (int n) 
{ 
    static int s = 0; 
    return s += n; 
} 

int main() 
{ 
    int y; 
    int i; 

    for (i=0; i<5; i++) { 
     y= foo(i); 
    } 

    printf("%d\n", foo); 

    return 0; 
} 

и я определенно заинтересован в значении foo и какой тип имеет. Компилятор дает мне это предупреждение

test.c:18:16: warning: format specifies type 'int' but the argument has type 
     'int (*)(int)' [-Wformat] 

но я не совсем уверен, что это значит. Что такое int (*)(int) и как вызов имени функции без аргументов дает мне что-то подобное?

+0

Если вы хотите получить значение 'foo', используйте' printf ("% p", (void *) foo); ', но это не гарантируется стандартом. Для типа см. [This] (http://cdecl.ridiculousfish.com/?q=int+%28*foo%29%28int%29) –

ответ

10

Без вызова функции foo оценивает на указатель на функцию, которая принимает int и возвращает int. Это длинное описание int (*)(int).

0

Вы не звоните foo. Чтобы позвонить foo, место (argument) после имени. Таким образом, вы принимаете адрес из foo, который имеет тип int (*)(int) (указатель на функцию, принимающий один целочисленный аргумент и возвращающий int) и отправляет его printf.

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