c中的`int(*)(int)`对于类型是什么意思?

时间:2015-10-06 04:13:05

标签: c function types

我有这个C代码(受测试启发)

#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)以及如何在没有参数的情况下调用函数名称会给我一些这种类型的东西?

2 个答案:

答案 0 :(得分:10)

如果没有函数调用,foo将求值为指向函数的指针,该函数接受int并返回int。这是int (*)(int)的详细描述。

答案 1 :(得分:0)

您没有致电foo。要致电foo,请在名称后面加(argument)。实际上,你取foo地址,类型为int (*)(int)(指向函数的指针,取一个整数参数并返回一个int)并将其发送给{{ 1}}。

printf然后抱怨,因为你试图告诉它打印printf,但是给它一个函数指针。