在下面的程序中,函数指针被定义为指向一个函数,该函数不接受任何参数并返回int,但函数指针在这里工作。为什么呢?
#include<stdio.h>
int mul(int*,int*);
int main()
{ int a=10,b=20;
int(*p)();
p=&mul;
printf("%d ", (*p)(&a,&b));
return 0;
}
int mul(int*a,int*b)
{
return (*a * *b);
}
答案 0 :(得分:3)
在C中,int (*p)()
表示声明一个指向函数的指针,该函数接受未指定的个参数并返回int
。由于未指定参数的数量,因此有效将指向函数int mul(int *a, int *b)
的指针指定给变量p
。
如果将声明更改为int (*p)(void)
,这意味着声明指向无参数并返回int
的函数的指针,则编译器可能会抛出一个关于不兼容的指针类型的警告。对于gcc,会在默认警告级别发出警告。
正如Keith Thompson在评论中提到的,你应该总是使用原型,即指定参数类型的声明。在这种情况下,它将是:
int (*p)(int*, int*);
<强>参考强>