分析以下代码输出结果:
#include <stdio.h>
int Add(int x,int y)
{
return x+y;
}
int main()
{
int (*p)(int,int)=Add;
int (*p2)(int,int)=&Add;
printf("%d\n ",Add(2,3));
printf("%d\n ",(*p)(2,3));
printf("%d\n ",(*p2)(2,3));
return 0;
}
输出结果:
可以得出结论:
1)函数指针声明方式类似于数组指针并不是放在变量名并不是放在最后的;
2)函数名和&函数名的功能相同;
3)利用函数指针调用函数: (*变量名)(实参),例如 (*p)(2,3);
实际上上述 int (p)(int,int)中也可以写int(p)(int x,int y)但,x,y在这里没有作用。
去掉函数指针变量名,其实就是变量类型了 :
int()(int,int) 表示 变量类型是 函数指针类型,指针指向一个返回值值为int类型,参数为(int,int)的函数。
char()() 表示 变量类型是 函数指针类型,指针指向一个返回值为char,无参数的函数。