函数指针赋值

时间:2011-12-04 00:35:54

标签: c function pointers

为什么我能够分配一个函数,该函数返回一个没有为函数指针指定参数的int,该函数指针返回一个int但是接受一个int参数?

例如,当我这样做时:

int f()
{ return 0;}

int (*ptr)(int) = f;

编译器没有给我任何警告

2 个答案:

答案 0 :(得分:5)

在C中,f不是“没有参数”,而是“任何参数”*。说int f(void)声明“没有参数”。

这与C ++不同。值得注意的是,C具有功能“声明”和功能“原型”的单独概念:

int f();              /* declaration -- f is still a mystery */
int f(int, double);   /* prototype -- now we know how to call f */
int f(int n, double c) { return -1; }  /* defintion -- now we can link */

*)正如我在评论中所说,“任何参数”仅限于不受默认促销的类型(与默认促销发生在可变参数上的方式相同)。也就是说,floatcharshort int以及...的所有风格,在实际的函数签名中都不是 。< / p>

答案 1 :(得分:0)

您使用哪种编译器?

  • MinGW-GCC-3.4.2:invalid conversion from int(*)()'to int (*)(int)'
  • Visual Studio 2010专业版:Error 1 error C2440: 'initializing' : cannot convert from 'int (__cdecl *)(void)' to 'int (__cdecl *)(int)'