从头开始学C语言第三十六天——函数指针和函数指针数组
函数指针
函数指针用来存放函数地址,这个地址就是一个函数的入口
函数名代表函数的入口地址
一般形式:
<数据类型> (*<函数指针名称>) (<参数说明列表>);
int *power (int a);
数据类型是函数指针所指函数的返回值类型
参数说明列表应该与函数指针所指函数形参保持一致
函数指针名称中,*说明是指针不可缺少的,意为函数指针
#include <stdio.h>
int add(int,int);
int main()
{
int a=1;
int b=2;
int (*p) (int,int);
p=add;
printf("result = %d\n",add(a,b));
printf("result = %d\n",(*p)(a,b));
return 0;
}
int add(int a,int b)
{
return a+b;
}
运行程序会发现,函数指针本质上跟前面学的指针没什么区别,只是所指对象的区别。定义了一个函数指针,并指向add这个函数的地址,在输出结果时,既可以通过函数add,也可以通过指针*p。当主函数内部大量调用函数,可以通过指针的方式简化程序。
函数指针数组
函数指针数组和之前的指针数组类似。指针数组是存放指针的数组,函数指针数组是存放函数指针的数组。
一般形式:
<数据类型> (*<函数指针数组名>) (<大小>) (<参数说明列表>)
大小:函数指针数组元素个数。其余部分与普通函数指针一样。
#include <stdio.h>
int add(int ,int);
int sub(int,int);
int main()
{
int a=3;
int b=1;
int (*p[2])(int,int);
p[0]=add;
p[1]=sub;
printf("result=%d\n",add(a,b));
printf("result=%d\n",(*p[0])(a,b));
printf("result=%d\n",(*p[1])(a,b));
return 0;
}
int add(int a,int b)
{
return a+b;
}
int sub(int a,int b)
{
return a-b;
}